Fehlerbehandlung in Bash
Dieser Artikel lehrt die Fehlerbehandlung in Bash. Denken Sie daran, dass die Kenntnis von Exit-Codes, Optionen wie errexit
und trap
es uns ermöglicht, robuste Skripte zu erstellen und Probleme mit Bash effektiver zu bewältigen.
Exit-Codes in Bash
Die Behandlung von Fehlern basierend auf Beendigungscodes ist die Standardtechnik zum Erkennen von Befehlsfehlern. Dies gilt insbesondere für externe Befehle.
Der Befehl curl
in Bash ist ein hervorragendes Beispiel für die Behandlung von Problemen basierend auf bekannten Fehlercodes. Im Gegensatz zu benutzerdefinierten Routinen werden externe Befehlsfehlercodes vollständig dokumentiert.
${?}
speichert einen Exit-Status des zuletzt ausgeführten Befehls vor einer gegebenen Zeile. Ein Code von 0
zeigt an, dass der Befehl erfolgreich ausgeführt wurde. Ansonsten ist etwas schief gelaufen.
case {?} in
0) {
true # ok
} ;;
*) {
false # something went wrong
}
Die Bash-Fehlerbehandlung kann mit einfachen Exit-Codes durchgeführt werden. Sie könnten versuchen, bis Sie eine faulere Lösung finden. Zumindest würde jeder Einzelne dies tun, nachdem er einige Bedingungen implementiert hat, um Probleme gemäß Fehlercodes zu behandeln.
Beenden bei Fehler
Beenden bei Fehler ist zweifellos die hilfreichste Fehlererkennungs- und -behandlungsfunktion, mit der Bash-Programmierer nicht beginnen.
trap
, EXIT
und ERROR
trap
ermöglicht es uns, Befehle anzugeben, die ausgeführt werden sollen, wenn die Shell ein Signal erhält. SIGNAL SPECs
sind die Bezeichnungen für Signale. Einige häufige EXIT-, ERROR-, DEBUG- und RETURN
-Signale.
Mit dem Befehl trap -l
können wir weitere Signale auflisten. Mit trap -p SIGSPEC
können wir auch feststellen, welche Befehle mit einem bestimmten Signal verknüpft sind.
Zum Beispiel möchten wir vielleicht bestimmen, welche Befehle dem ERR
-Signal entsprechen. In dieser Situation könnten wir die folgende Befehlszeile eingeben:
trap -p ERR
Ist der Ausgang leer, hat trap
noch keine Befehle mit dem Signal verknüpft.
_() { echo oops ; }
trap _ ERR EXIT
Jetzt erzeugen Drucksignalbefehle kein leeres Ergebnis.
EINGANG:
trap -p EXIT ERR
Ausgang:
trap -- '_' EXIT
trap -- '_' ERR