Ich schreibe ein Shell-Skript und muss überprüfen, ob eine Terminal-App installiert ist. Ich möchte einen TRY/CATCH-Befehl verwenden, um dies zu tun, es sei denn, es gibt einen eleganteren Weg.
Antworten
Zu viele Anzeigen?
Aleks
Punkte
669
joel
Punkte
66
Axel Heider
Punkte
496
Ich kann dies im "bash -ue" Modus empfehlen:
set -ue
false && RET=$? || RET=$?
echo "erwarte 1, erhalten ${RET}"
true && RET=$? || RET=$?
echo "erwarte 0, erhalten ${RET}"
echo "Test try...catch"
false && RET=$? || RET=$?
if [ ${RET} -ne 0 ]; then
echo "Fehler ${RET} abgefangen"
fi
echo "Vorsicht, Benutzung von '||' vor '&&' scheitert"
echo " -> Eselsbrücke: [U]nd vor [O]der im Alphabet"
false || RET=$? && RET=$?
echo "erwarte 1, erhalten ${RET}"
true || RET=$? && RET=$?
echo "erwarte 0, erhalten ${RET}"
syberghost
Punkte
309
openCivilisation
Punkte
582
Ich bevorzuge die Verwendung von Trap, um dieses Problem zu lösen, da es am wenigsten mit der Formatierung interferiert.
Ich kopiere ein Beispiel für die Verwendung von Trap aus dieser großartigen Lektüre von Dirk Avery: https://medium.com/@dirk.avery/the-bash-trap-trap-ce6083f36700
#!/bin/bash
set -e
trap 'catch $? $LINENO' EXIT
catch() {
echo "fangen!"
if [ "$1" != "0" ]; then
# Fehlerbehandlung hier
echo "Fehler $1 ist auf $2 aufgetreten"
fi
}
simple() {
badcommand
echo "Hallo von simple()!"
}
simple
echo "Nach dem Aufruf von simple"
Das würde die folgende Ausgabe erzeugen:
./script.sh: Zeile 13: badcommand: Befehl nicht gefunden
fangen!
Fehler 127 ist auf 12 aufgetreten