Was ist ein Exit-Code
Jedes Skript, jeder Befehl oder jede Binärdatei wird mit einem Rückgabecode beendet. Sie können diesen Wert in der speziellen Variable $? sehen . Rückgabecodes sind numerisch und auf Werte zwischen 0 und 255 beschränkt, da eine 8-Bit-Ganzzahl ohne Vorzeichen verwendet wird. Wenn Sie einen Wert von -1 verwenden, wird 255 zurückgegeben. Jede Ausführung endet mit einem Exit-Code, ob erfolgreich oder nicht, mit einer Fehlermeldung oder im Hintergrund. Zum Beispiel:
$ date ; echo $? Sat Jan 18 08:06:07 IST 2020 0
Wie Sie sehen können, ist der Exit-Code 0, da der Befehl ohne Probleme ausgeführt wurde. Versuchen wir es jetzt:
$ wrngcmd ; echo $? -bash: wrngcmd: command not found 127
Es ist ein Befehl, der nicht gefunden wurde, da wir nur eine bedeutungslose Reihe von Zeichen eingegeben haben.
Reservierte Bash-Exit-Codes
So ähnlich wie der Exit-Code „0“, der den Erfolg des Befehls anzeigt, hat Bash einige reservierte Exit-Codes für verschiedene Situationen. Wenn Sie also einen Exit-Befehl in einem Skript verwenden und einen Exit-Code angeben müssen, verwenden Sie diese reservierten Exit-Codes idealerweise nicht, da sie zu widersprüchlichen Ergebnissen führen können.
Ausgangscodenummer | Bedeutung | Beispiel | Kommentare |
---|---|---|---|
1 | Catchall für allgemeine Fehler | lassen Sie „var1 =1/0“ | Verschiedene Fehler, wie „Teile durch Null“ und andere unzulässige Operationen |
2 | Missbrauch von Shell-Builts | empty_function() {} | Schlüsselwort oder Befehl fehlt |
126 | Aufgerufener Befehl kann nicht ausgeführt werden | /dev/null | Berechtigungsproblem oder Befehl ist nicht ausführbar |
127 | “Befehl nicht gefunden” | illegaler_Befehl | Mögliches Problem mit $PATH oder einem Tippfehler |
128 | Ungültiges Argument zum Beenden | Exit 3.14159 | exit akzeptiert nur ganzzahlige Argumente im Bereich von 0 – 255 (siehe erste Fußnote) |
128 +n | Schwerwiegendes Fehlersignal „n“ | kill -9 $PPID des Skripts | $? gibt 137 (128 + 9) zurück |
130 | Skript beendet durch Strg-C | Strg-C | Control-C ist fatales Fehlersignal 2, (130 =128 + 2, siehe oben) |
255* | Exit-Status außerhalb des Bereichs | Ausgang -1 | exit akzeptiert nur ganzzahlige Argumente im Bereich von 0 – 255 |
Lassen Sie uns den Exit-Code „128 +n“ anhand eines Beispiels verstehen. Führen Sie die Endlosschleife wie unten gezeigt aus:
#!/bin/bash while true; do echo ${$} done
Wenn Sie dieses Skript ausführen, wird es die gleiche PID auf unbestimmte Zeit drucken, bis Sie es beenden oder „STRG + C“ ausführen. Versuchen Sie es mit „STRG+C“ und sehen Sie, wie der Exit-Code lautet.
# sh test.sh .... 2582 2582 2582 2582 2582 2582 ^C geeklab$ echo $? 130
Wie Sie sehen können, ist der Exit-Code „128+2“, d. h. 130. Wenn wir das Skript mit „kill -9“ beenden, sollte der Exit-Code „128+9“, d. h. 137, lauten. Sehen wir uns auch dafür ein Beispiel an:
# sh test.sh .... 2582 2582 2582 ...
# kill -9 [pid_of_script]
.... 2602 2602 Killed: 9 geeklab$ echo $? 137