Wie kann ich überprüfen, ob ein Programm existiert, und zwar so, dass es entweder einen Fehler zurückgibt und beendet wird oder mit dem Skript fortfährt?
Es sollte eigentlich ganz einfach sein, aber es hat mich nicht weitergebracht.
Wie kann ich überprüfen, ob ein Programm existiert, und zwar so, dass es entweder einen Fehler zurückgibt und beendet wird oder mit dem Skript fortfährt?
Es sollte eigentlich ganz einfach sein, aber es hat mich nicht weitergebracht.
Wenn Sie prüfen, ob ein Programm vorhanden ist, werden Sie es wahrscheinlich sowieso später ausführen. Warum versuchen Sie nicht, es überhaupt zu starten?
if foo --version >/dev/null 2>&1; then
echo Found
else
echo Not found
fi
Es ist eine vertrauenswürdigere Überprüfung, dass das Programm läuft, als wenn man nur die PATH-Verzeichnisse und Dateiberechtigungen überprüft.
Außerdem können Sie einige nützliche Ergebnisse von Ihrem Programm erhalten, z. B. seine Version.
Der Nachteil ist natürlich, dass manche Programme schwer zu starten sind und manche keine --version
Option, um das Programm sofort (und erfolgreich) zu beenden.
Ich habe es absichtlich so einfach wie möglich gemacht. Die einzige Möglichkeit, dass es nicht funktioniert, wäre wahrscheinlich, den Namen des Programms falsch einzugeben. Abgesehen davon sollte es unter allen Bedingungen funktionieren.
Prüfung auf Mehrfachabhängigkeiten und Information der Endnutzer über den Status
for cmd in latex pandoc; do
printf '%-10s' "$cmd"
if hash "$cmd" 2>/dev/null; then
echo OK
else
echo missing
fi
done
Beispielhafte Ausgabe:
latex OK
pandoc missing
Einstellen der 10
auf die maximale Befehlslänge. Dies geschieht nicht automatisch, denn ich sehe keine nicht-verbale POSIX-Methode, um dies zu tun: Wie kann ich die Spalten einer durch Leerzeichen getrennten Tabelle in Bash ausrichten?
Prüfen Sie, ob einige apt
Pakete werden installiert mit dpkg -s
und installieren Sie sie andernfalls .
Siehe: Prüfen Sie, ob ein apt-get-Paket installiert ist, und installieren Sie es, falls nicht, unter Linux
Es wurde bereits erwähnt unter: Wie kann ich von einem Bash-Skript aus prüfen, ob ein Programm existiert?
Ich habe die vorherigen Antworten auf der Box, zu der ich Zugang habe, nie zum Laufen gebracht. Zum einen, type
installiert worden ist (was die more
tut). Daher wird die Built-in-Richtlinie benötigt. Dieser Befehl funktioniert bei mir:
if [ `builtin type -p vim` ]; then echo "TRUE"; else echo "FALSE"; fi
Die Klammern sind nicht Teil der if
Syntax, verwenden Sie einfach if builtin type -p vim; then ...
. Und die Backticks sind eine wirklich alte und veraltete Syntax, $()
wird sogar unterstützt von sh
auf allen modernen Systemen.
@nyuszika7h Aber diese Tests können fehlschlagen: Zum Beispiel builtin type -p if
gibt nichts aus und gibt 0 zurück, egal ob if
existiert.
@jarno Was ist Ihr Argument? Wie Sie sagen, es beide nichts aus und gibt 0 zurück, daher macht es keinen Unterschied, ob Sie if builtin type -p if
o if [ `builtin type -p if` ]
, mit der Ausnahme, dass letztere unnötig langatmig ist und eine veraltete Syntax verwendet.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
2 Stimmen
Was ist ein "Programm"? Beinhaltet es Funktionen und Aliasnamen?
which
gibt für diese den Wert true zurück.type
ohne Argumente gibt zusätzlich true für reservierte Wörter und Shell-Builtins zurück. Wenn "Programm" bedeutet "auswählbar in$PATH
", dann siehe diese Antwort .1 Stimmen
Ebenfalls relevant ist Wie kann man mit 'hash -r' alle Shells aktualisieren? y Wann sollen ausführbare Dateien in $PATH mit der Bash aufbereitet werden?
0 Stimmen
@TomHale Es hängt davon ab, welche Implementierung von
which
die Sie verwenden; diese wird nicht von der Bash, sondern z.B. von Debian's debianutils bereitgestellt.