Überprüfen Sie, ob ein Befehl in Bash vorhanden ist

Faiq Bilal 20 Juni 2023
  1. Verwenden Sie den Befehl command -v, um zu prüfen, ob ein Befehl in Bash existiert
  2. Verwenden Sie den Befehl type, um zu prüfen, ob ein Befehl in Bash existiert
  3. Verwenden Sie den Befehl hash, um zu prüfen, ob ein Befehl in Bash vorhanden ist
  4. Verwenden Sie den Befehl test, um zu prüfen, ob ein Befehl in Bash existiert
Überprüfen Sie, ob ein Befehl in Bash vorhanden ist

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.

  1. -b DATEI - True, wenn die Datei eine spezielle Blockdatei ist.
  2. -c DATEI - True, wenn die Datei eine Sonderzeichendatei ist.
  3. -d DATEI - True, wenn es sich um ein Verzeichnis handelt.
  4. -e DATEITrue, wenn es sich um eine Datei handelt, unabhängig vom Typ.
  5. -f DATEITrue nur, wenn es sich um eine normale Datei handelt (z. B. kein Verzeichnis oder Gerät).
  6. -G DATEI - True, wenn die Datei dieselbe Gruppe hat wie der Benutzer, der den Befehl ausführt.
  7. -h DATEI - True, wenn es sich um einen symbolischen Link handelt.
  8. -g FILETrue, wenn das Flag set-group-id (sgid) gesetzt ist.
  9. -k FILETrue, wenn ein Sticky-Bit-Flag gesetzt ist.
  10. -L FILE - True, wenn es sich um einen symbolischen Link handelt.
  11. -O FILE - True, wenn es dem Benutzer gehört, der den Befehl ausführt.
  12. -p FILE - True, wenn es sich um eine Pipe handelt.
  13. -r FILE - True, wenn es lesbar ist.
  14. -S FILE - True, wenn es sich um einen Socket handelt.
  15. -s FILETrue, wenn es eine Größe ungleich Null hat.
  16. -u FILETrue, wenn das Flag set-user-id (suid) gesetzt ist.
  17. -w DATEI - True, wenn es beschreibbar ist.
  18. -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.

Verwandter Artikel - Bash Command