command
ist ein bash builtin wie wir sehen können:
seth@host:~$ type command
command is a shell builtin
Wir wissen command
also, dass unsere Shell, bash , für uns sorgt. Wenn man bash
wir uns vertiefen , können wir sehen, wozu es dient:
(von man bash
):
command [-pVv] command [arg ...]
Run command with args suppressing the normal shell function
lookup. Only builtin commands or commands found in the PATH are
executed. If the -p option is given, the search for command is
performed using a default value for PATH that is guaranteed to
find all of the standard utilities. If either the -V or -v
option is supplied, a description of command is printed. The -v
option causes a single word indicating the command or file name
used to invoke command to be displayed; the -V option produces a
more verbose description. If the -V or -v option is supplied,
the exit status is 0 if command was found, and 1 if not. If
neither option is supplied and an error occurred or command
cannot be found, the exit status is 127. Otherwise, the exit
status of the command builtin is the exit status of command.
Im Wesentlichen würden Sie verwenden command
, um "normale Funktionssuche" zu umgehen. Angenommen, Sie hatten eine Funktion in Ihrem .bashrc
:
function say_hello() {
echo 'Hello!'
}
Normalerweise, wenn Sie laufen say_hello
würde die Funktion mit dem Namen finden in Ihrem Terminal bash say_hello
in Ihrem .bashrc
bevor es gefunden, sagen wir, eine Anwendung mit dem Namen say_hello
. Verwenden von:
command say_hello
Lässt Bash seine normale Funktionssuche umgehen und geht direkt zu Builtins oder Your $PATH
. Beachten Sie, dass diese Funktionssuche auch Aliase enthält. Mit command
werden sowohl Funktionen als auch Aliase umgangen.
Wenn die -p
Option verfügbar ist, umgeht bash Ihre benutzerdefinierten Einstellungen $PATH
und verwendet die eigenen Standardeinstellungen.
Die -v
oder -V
Flags-Bash gibt eine Beschreibung (kurz für -v
, lang für -V
) des Befehls aus.
Hinweis: Wie souravc in den Kommentaren ausgeführt hat, finden Sie hier eine einfachere Methode zum Auffinden von Informationen über Shell-Builtins: Wie kann man für Shell-Builtin-Befehle und -Schlüsselwörter arbeiten?
command
auf meinem Computer.sudo apt-get install manpages-posix
. Es ist nicht standardmäßig installiert. schau mal hierDies ist ein integrierter Befehl der Bash-Shell.
Der einzige Vorteil, den ich mit dieser integrierten Funktion sehe, ist im folgenden Satz des Hilfetexts zusammengefasst:
Wenn Sie also ein Programm ausführen möchten (eine Binärdatei, die auf einem Teil Ihrer Festplatte gespeichert ist) und eine interne Shell-Funktion mit demselben Namen vorhanden ist, können Sie Ihr Programm mit dieser integrierten Funktion aufrufen.
Und ja,
command -v
wird die gleiche Art von Ergebnis geben wietype
.Ich habe es auch unter der Dash-Shell gefunden.
quelle
command (name)
Shell-Funktionen zwar ignoriert werden, diescommand -v (name)
jedoch nicht.command -v (name) >/dev/null
soll die portable Möglichkeit sein, zu überprüfen, ob der Befehl mit diesem Namen existiert, unabhängig davon, ob es sich um eine eingebaute Shell, eine Funktion oder ein externes Dienstprogramm handelt.command make
, um das tatsächliche Programm make aufzurufen. Leider habe ich andere Shell-Skripte, die kaputt gingen, als die AOSP-Umgebung anfing, diemake
Programmausgaben mit Scheiße zu versehen, und es war verdammt irritierend, herauszufinden, woher diese zusätzliche Ausgabe auf mysteriöse Weise stammte.Es hat zwei verschiedene Verwendungszwecke:
Eine Möglichkeit besteht darin, Aliase und Funktionen zu ignorieren und die in PATH gefundene ausführbare Datei auszuführen , auch wenn ein Alias oder eine Funktion mit demselben Namen vorhanden ist.
Als Beispiel verwende ich einen Alias für
ls
das Anhängen eines/
an Verzeichnisnamen:In einer interaktiven Shell ist es möglicherweise praktischer, einen Backslash vor dem Befehlsnamen als alternative, kürzere Syntax zu verwenden:
Die andere Verwendung besteht darin , den Befehl zu finden, der ausgeführt wird, wenn der Befehlsname nicht mithilfe der Option verwendet wird
-v
. Es scheint die portabelste / POSIX-Variante von zu seinwhich
.quelle
command
Dies ist beispielsweise nützlich, wenn Sie überprüfen möchten, ob ein bestimmter Befehl vorhanden ist.which
Bezieht Aliase in die Suche ein, sodass sie für diesen Zweck nicht geeignet sind, da Sie nicht möchten, dass ein zufälliger Alias als der betreffende Befehl betrachtet wird.Mit anderen Worten, Sie können eine kleine Funktion in einem Shell-Skript wie folgt haben:
Und dann teste auf einen verfügbaren Befehl (hier,
dialog
) wie folgt:quelle
Sie können einen Shell-Befehl ausführen, der alle Shell-Funktionen ignoriert.
http://ss64.com/bash/command.html
quelle