Fehlerbehandlung in Bash

Nilesh Katuwal 20 Juni 2023
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

Verwandter Artikel - Bash Error