Wenn es einen internen Befehl und einen externen Befehl (Programm) mit demselben Namen gibt, welcher wird standardmäßig ausgeführt?

Wenn es einen internen Befehl und einen externen Befehl (Programm) mit demselben Namen gibt, welcher wird standardmäßig ausgeführt?

bashhat einen internen Befehl namens kill, und unter Linux gibt es auch einen externen Befehl (Programm) namens kill.

Wenn ich killin ausführe bash, wird der interne Befehl killausgeführt.

Ich habe zwei Fragen:

  1. Gibt es eine Einstellung, die ich ändern kann, damit standardmäßig der externe Befehl statt des internen Befehls ausgeführt wird (natürlich ohne den vollständigen Pfad des externen Befehls anzugeben)?
  2. Ist es ein Standardverhalten, dass in allen (wichtigen) Shells standardmäßig der interne Befehl anstelle des externen Befehls ausgeführt wird, oder ist das einfach so bash?

Antwort1

  1. Verwenden Sie enves, um es aufzurufen.

    $ env kill
    kill: not enough arguments
    $ kill
    kill: usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]
    
  2. Alle Shells und Befehlsprozessoren.

Antwort2

Zu Ihrer ersten Frage: Ja, es gibt eine Einstellung, die standardmäßig die Ausführung des externen Befehls anstelle des internen Befehls bewirkt.

Sie können die integrierte Funktion deaktivieren, indem Sie

enable -n COMMAND

Sie können die integrierte Funktion einschalten, indem Sie

enable COMMAND

oder Sie können die Priorität des Befehls ändern. Die Priorität des Bash-Befehls ist:

  • alias, es ist die höchste
  • Funktion
  • eingebaut
  • externer Befehl in $PATH

Zu Ihrer zweiten Frage: Ich denke, Sie können immer davon ausgehen, dass der interne Befehl vor dem externen Befehl kommt. Das ist nicht nur eine Bash-Sache.

verwandte Informationen