command foo
führt den foo
Befehl auch dann aus, wenn eine foo
Shell-Funktion definiert ist. Dieses Verhalten ist für POSIX erforderlich .
Damit können Sie den foo
Befehl innerhalb der foo
Funktion aufrufen . Ohne command foo
die Funktion würde sich (beim Aufruf) selbst aufrufen und eine Zirkelreferenz erstellen.
Manchmal können Sie die foo
ausführbare Datei mit ihrem vollständigen Pfad aufrufen, um die Suche nach der Shell-Funktion zu unterdrücken (umständlich und nicht portabel, immer noch eine Art Problemumgehung), aber in manchen Fällen ist dies nicht möglich. In dieser Antwort von mir (nahe dem Ende) werde ich neu definiert cd
und command cd
ist ein Muss, denn selbst wenn es eine cd
ausführbare Datei gibt, deren vollständigen Pfad ich verwenden könnte, würde das Verzeichnis nicht geändert. Die Verwendung command
ist der richtige Weg, um damit umzugehen.
Auch note command foo
wird keinen foo
Alias auslösen (falls vorhanden). Sie haben ls
als Beispiel verwendet. Mindestens einige gemeinsame alias Linux - Distributionen ls
auf ls --color=auto
der Standardeinstellung. In diesem Fall ls
und command ls
kann unterschiedliche Ergebnisse (dh farbig oder nicht) ergeben. Bei der POSIX-Definition (oder einer anderen Definition von) command
müssen keine Aliasnamen erwähnt werden, da Aliasnamen (sofern vorhanden) bar foo
nicht ausgelöst werden foo
(mit wenigen Ausnahmen bar
, die jedoch command
keine sind).
Ob Sie command foo
in einer interaktiven Shell-Sitzung oder in einem Shell-Skript verwenden, kann foo
für das command
eingebaute Programm von Bedeutung sein, nicht jedoch für das eingebaute.