»exit codes« oder »Exit-Codes« (auch »return codes«) sind numerische Werte, die von einem Programm oder Befehl an das Betriebssystem zurückgegeben werden, beim Beenden. Der Exit-Code sagt aus, ob das Programm oder der Befehl erfolgreich ausgeführt wurde oder nicht. Im Allgemeinen gibt ein Exit-Code von 0 an, dass das Programm erfolgreich beendet wurde, während jeder anderen numerischen Werte einen Fehler signalisiert. Exit-Codes haben in der Regel Werte zwischen 0 und 255 und können damit den Grund für einen Fehler identifizieren.
Reservierte Exit-Codes
Exit-Code | Allgemeine Bedeutung |
---|---|
1 |
Eine allgemeine Fehlermeldung, die für alle Arten von Fehlern verwendet werden kann, die nicht spezifisch genug sind, um durch einen anderen Exit-Code abgedeckt zu werden. |
2 |
Wird verwendet wenn Shell-Befehle fehlerhaft nicht gemäß, der Dokumentation von BASH, verwendet werden. |
126 |
Wird zurück gegeben, wenn ein aufgerufener Befehl nicht ausgeführt werden kann, z.B. weil der ausführende Benutzer keine Berechtigung hat. |
127 |
Den Fehlercode sieht man, wenn ein aufgerufener Befehl nicht gefunden werden kann. |
128 |
Der Fehlercode wird zurück gegeben, wenn der Befehl exit falsch verwendet wird, z.B. wenn eine ungültige Option übergeben wird. |
128+n |
Wenn ein Signal mit einer schwerwiegenden Fehlermeldung empfangen wird, z.B. wenn ein Prozess wegen eines Speicherzugriffsfehlers (SIGSEGV – Nr. 11) abgebrochen wird, wird die Nummer des Signal (n ) auf 128 addiert und als Fehler zurück gegeben. |
255* |
Ein spezieller Exit-Code, der verwendet wird, um Fehler zu signalisieren, die außerhalb des Bereichs von 8-Bit-Exit-Codes liegen. |
Exit-Code ausgeben
Um den Exit-Code des zuletzt ausgeführten Befehls in der Linux-Shell interagieren zu können, können Sie die Umgebungsvariable $?
verwenden:
#!/bin/bash
# Führe den Befehl "ls" aus und speichere den Exit-Code
ls
if [ $? -eq 0 ]; then
echo "Der Befehl 'ls' wurde erfolgreich ausgeführt."
else
echo "Der Befehl 'ls' konnte nicht ausgeführt werden."
fi
In diesem Beispiel wird der Befehl ls
ausgeführt, und der Exit-Code wird in der Umgebungsvariablen $?
gespeichert. Das if
-Statement prüft dann, ob der Exit-Code gleich 0 ist (was bedeutet, dass der Befehl erfolgreich ausgeführt wurde). Wenn der Exit-Code nicht gleich 0 ist, wird eine Fehlermeldung ausgegeben.
Beispiele
Exit-Code 1
$ echo hello > /etc/passwd
bash: /etc/passwd: Permission denied
$ echo $?
1
echo
versucht, die Ausgabe in eine geschützte Systemdatei zu schreiben. Das Programm gibt den allgemeinen Exit-Code 1 aus.
Exit-Code 2
$ ls non-existent-dir
ls: cannot access 'non-existent-dir': No such file or directory
$ echo $?
2
ls
wird auf ein nicht vorhandenes Verzeichnis angewendet, was zu einem Fehler führt. Das Programm gibt den Exit-Code 2 aus, was darauf hinweist, dass der Befehl falsch verwendet wurde.
Exit-Code 126
$ /root/non-existent-command
bash: /root/non-existent-command: Permission denied
$ echo $?
126
Der Befehl non-existent-command
kann nicht ausgeführt werden, weil dem ausführenden Benutzer die Berechtigung fehlt. Die Shell den Exit-Code 126 aus.
Exit-Code 127
$ non-existent-command
bash: non-existent-command: command not found
$ echo $?
127
Der Befehl non-existent-command
gibt es nicht und kann deswegen auch nicht gefunden werden, was auf einen Schreibfehler oder eine falsche Eingabe hinweist. Die Shell gibt den Exit-Code 127 aus.
Exit-Code 128
$ exit -x
bash: exit: -x: invalid option
exit: usage: exit [n]
$ echo $?
128
exit
wird falsch verwendet, indem eine ungültige Option übergeben wird. Das Programm gibt den Exit-Code 128 aus.
Exit-Code 128+n
Exit-Code 139
$ kill -SEGV $$
$ echo $?
139
Das Programm empfängt das Signal SIGSEGV11, was zu einem Exit-Code von 139 führt.
Exit-Code 130
$ sleep 10
^C
$ echo $?
130
sleep
wird durch das Signal SIGINT2 (durch STRG-C
) beendet. Das Programm gibt den Exit-Code 130 (128+2) aus.
Exit-Code 255
$ ssh non-existent-host
ssh: Could not resolve hostname non-existent-host: Name or service not known
$ echo $?
255
Der Befehl ssh
kann den angegebenen Hostnamen nicht auflösen. Das Programm gibt den Exit-Code 255 aus, um anzuzeigen, dass ein Fehler aufgetreten ist, der außerhalb des Bereichs von 8-Bit-Exit-Codes liegt.
Links
- https://manpages.ubuntu.com/manpages/xenial/man1/bash.1.html: Eine ausführliche Dokumentation des Bash-Shells auf Ubuntu Linux. Dies ist die offizielle Handbuchseite für die Bash-Version, die in Ubuntu 16.04 (Xenial Xerus) verwendet wird.
- https://tldp.org/LDP/abs/html/exitcodes.html: Ein Abschnitt aus dem „Advanced Bash Scripting Guide“, der eine umfassende Liste von Exit-Codes für Shell-Skripte auf Linux enthält. Der Artikel erläutert auch, wie Exit-Codes in Shell-Skripten verwendet werden können.
- https://linuxconfig.org/list-of-exit-codes-on-linux: Eine Liste von Exit-Codes für Linux-Systeme, die häufig von verschiedenen Anwendungen und Befehlen verwendet werden. Die Liste enthält auch eine kurze Beschreibung jedes Exit-Codes.
- https://tldp.org/LDP/abs/html/exit-status.html: Ein Abschnitt aus dem „Advanced Bash Scripting Guide“, der erklärt, was der Exit-Status von einem Befehl bedeutet und wie er in Shell-Skripten verwendet werden kann. Der Artikel enthält auch eine Liste von häufig verwendeten Exit-Codes.
- https://shapeshed.com/unix-exit-codes/: Ein kurzer Artikel, der die Bedeutung von Exit-Codes auf Unix-Systemen erklärt und einige der häufig verwendeten Exit-Codes beschreibt.
- https://madflojo.medium.com/understanding-exit-codes-in-bash-6942a8b96ce5: Ein Artikel, der sich auf die Bedeutung von Exit-Codes in Bash-Skripten konzentriert und beschreibt, wie sie verwendet werden können, um die Fehlerbehandlung in Bash-Skripten zu verbessern. Der Artikel enthält auch Beispiele für die Verwendung von Exit-Codes in Bash-Skripten.
- https://openbook.rheinwerk-verlag.de/linux_unix_programmierung/Kap08-000.htm: Online-Buch „Linux-Unix-Programmierung“ des Rheinwerk-Verlags. Der Link führt zur Kapitelübersicht des achten Kapitels, das sich mit dem Thema »Signale« beschäftigt.