»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