Überprüfen Sie, ob ein Befehl in Bash vorhanden ist
-
Verwenden Sie den Befehl
command -v
, um zu prüfen, ob ein Befehl in Bash existiert -
Verwenden Sie den Befehl
type
, um zu prüfen, ob ein Befehl in Bash existiert -
Verwenden Sie den Befehl
hash
, um zu prüfen, ob ein Befehl in Bash vorhanden ist -
Verwenden Sie den Befehl
test
, um zu prüfen, ob ein Befehl in Bash existiert
Es kann erforderlich sein, mithilfe von Bash-Skripting oder -Programmierung zu überprüfen, ob ein Befehl, ein Programm oder eine Datei vorhanden ist. In diesem Artikel werden mehrere Methoden aufgeführt, um diese Anforderung zu erfüllen.
Wir können verschiedene eingebaute Befehle in Bash verwenden, mit denen wir überprüfen können, ob ein Befehl vorhanden ist oder nicht. Die Verwendung dieser Befehle wird unten demonstriert.
Verwenden Sie den Befehl command -v
, um zu prüfen, ob ein Befehl in Bash existiert
Der Befehl -v
ist eine eingebaute Funktion in allen POSIX-Systemen und Bash. Diese Funktion prüft, ob ein Befehl existiert, da sie den gültigen Pfad für diesen Befehl zurückgibt, wenn er existiert, und NULL
zurückgibt, wenn dies nicht der Fall ist.
Zum Beispiel:
command -v ls
Ausgang:
/bin/ls
Der Befehl -v
kann auch sicher in Bash-Skripten verwendet werden, um die Existenz eines Befehls mit if
-Bedingungen zu überprüfen, was unten demonstriert wird.
if ! [ -x "$(command -v npm)" ]; then
echo 'Error: npm is not installed.' >&2
exit 1
fi
Der obige Code prüft, ob npm
installiert ist, d.h. im Benutzerverzeichnis existiert und ob es ausführbar ist. Wenn npm
nicht auf Path
gefunden wird, löst der obige Code eine Ausnahme aus und wird beendet.
Die obige Vorlage kann verwendet werden, um die Existenz eines beliebigen Programms/Befehls/Dienstprogramms zu überprüfen, indem der Name dieses Programms/Befehls/Dienstprogramms verwendet wird.
Verwenden Sie den Befehl type
, um zu prüfen, ob ein Befehl in Bash existiert
Der Befehl type
ist ein sehr nützlicher eingebauter Befehl, der Informationen über die verwendete Entität liefert. Es kann mit Befehlen, Dateien, Schlüsselwörtern, Shell-Einbauten usw. verwendet werden.
Die Verwendung des type
-Befehls wird unten gezeigt.
type command
Ausgang:
command is a shell builtin
Genauer gesagt können wir für unseren Anwendungsfall den Befehl type
mit der Option -p
verwenden, um den Pfad einer Datei oder einer ausführbaren Datei zu erhalten. Die Verwendung davon wird unten demonstriert.
type -p npm
Ausgang:
/usr/local/bin/npm
Seit npm
auf unserem System installiert wurde, hat type -p
seinen gültigen Pfad zurückgegeben. Es ist wichtig zu beachten, dass, wenn der Befehl type
(ohne Flags) mit einer Entität verwendet wird, die nicht existiert, ein Fehler ausgelöst wird; jedoch gibt type -p
im selben Fall stattdessen NULL
zurück.
Dieses Verhalten wird unten demonstriert.
type yarn
Ausgang:
bash: type: yarn: not found
Es wird ein Fehler zurückgegeben, da Garn
nicht auf unserem System installiert ist. Typ -p Garn
gibt jedoch keine Ausgabe zurück; Je nachdem, wie und warum die Existenz eines Programms geprüft werden soll, kann das -p
-Flag verwendet oder weggelassen werden.
Verwenden Sie den Befehl hash
, um zu prüfen, ob ein Befehl in Bash vorhanden ist
Der Befehl hash
funktioniert ähnlich wie der Befehl type
. Es wird jedoch erfolgreich beendet, wenn der Befehl nicht gefunden wird.
Darüber hinaus hat es den zusätzlichen Vorteil, dass der abgefragte Befehl gehasht wird, was zu einer schnelleren Suche führt.
Die Syntax für den Befehl lautet wie folgt.
hash -t ls
In diesem Fall lautet der Abfragebefehl ls
. Abhängig von Ihrem System sieht die Ausgabe etwa wie folgt aus.
/usr/bin/ls
Dies ist der Speicherort der Datei, die ausgeführt wird, wenn der Befehl aufgerufen wird. Wenn der Befehl nicht gefunden wird, z. B. wenn die Abfrage etwa so lautet: hash -t nothing
, dann sieht die Ausgabe wie folgt aus.
bash: hash: nothing: not found
Die Ausgabe ist beschreibend, wenn der Befehl gefunden wird, und bietet den zusätzlichen Vorteil, dass der Befehl für eine schnellere Suche beim nächsten Mal gehasht wird.
Verwenden Sie den Befehl test
, um zu prüfen, ob ein Befehl in Bash existiert
test
ist ein eingebauter Shell-Befehl, der hauptsächlich für Vergleiche und bedingte Anweisungen verwendet wird; es kann auch verwendet werden, um die Existenz von Dateien und Verzeichnissen zu überprüfen; Es ist wichtig zu beachten, dass test
nur funktioniert, wenn der vollständige, gültige Pfad der Datei oder des Verzeichnisses, das Sie überprüfen möchten, angegeben wird.
Es gibt viele Options-Flags mit dem Befehl test
, die sich auf Dateien und Verzeichnisse beziehen, und eine Liste dieser Options-Flags wird unten gezeigt.
Zu beachten ist, dass diese Flags nur dann true
zurückgeben, wenn die Datei existiert und die Sonderbedingung erfüllt ist. Nachfolgend finden Sie die Sonderkonditionen aufgelistet.
-b DATEI
-True
, wenn die Datei eine spezielle Blockdatei ist.-c DATEI
-True
, wenn die Datei eine Sonderzeichendatei ist.-d DATEI
-True
, wenn es sich um ein Verzeichnis handelt.-e DATEI
–True
, wenn es sich um eine Datei handelt, unabhängig vom Typ.-f DATEI
–True
nur, wenn es sich um eine normale Datei handelt (z. B. kein Verzeichnis oder Gerät).-G DATEI
-True
, wenn die Datei dieselbe Gruppe hat wie der Benutzer, der den Befehl ausführt.-h DATEI
-True
, wenn es sich um einen symbolischen Link handelt.-g FILE
–True
, wenn das Flagset-group-id
(sgid
) gesetzt ist.-k FILE
–True
, wenn ein Sticky-Bit-Flag gesetzt ist.-L FILE
-True
, wenn es sich um einen symbolischen Link handelt.-O FILE
-True
, wenn es dem Benutzer gehört, der den Befehl ausführt.-p FILE
-True
, wenn es sich um eine Pipe handelt.-r FILE
-True
, wenn es lesbar ist.-S FILE
-True
, wenn es sich um einen Socket handelt.-s FILE
–True
, wenn es eine Größe ungleich Null hat.-u FILE
–True
, wenn das Flagset-user-id
(suid
) gesetzt ist.-w DATEI
-True
, wenn es beschreibbar ist.-x DATEI
-True
, wenn es ausführbar ist.
In diesem Beispiel bezeichnet FILE
den vollständigen, gültigen Pfad einer Datei, die der Benutzer überprüfen möchte.
Nachfolgend wird die Verwendung eines Tests
zur Überprüfung der Existenz einer Datei gezeigt.
test -e etc/random.txt && echo "FILE exists."
Die obige Code-Anweisung prüft die Existenz der Datei etc/random.txt
und gibt FILE exists
aus, wenn die Testanweisung true
zurückgibt.