Gibt es eine Möglichkeit, wie ich mit den Terminalbefehlen im Titel verfahren kann, oder muss ich die Codes überprüfen?
command
documentation
exit
präzise
quelle
quelle
Exit - Codes weisen auf einen Fehlerzustand beim Beenden eines Programms hin und liegen zwischen 0 und 255. Die Shell und ihre eingebauten Funktionen können insbesondere die Werte über 125 verwenden, um bestimmte Fehlermodi anzuzeigen. Daher kann die Liste der Codes zwischen Shells und Betriebssystemen variieren (z. B. Bash verwendet den Wert 128 + N als Ausgangsstatus). Siehe: Bash - 3.7.5 Exit Status oder
man bash
.Im Allgemeinen zeigt ein Null- Beendigungsstatus an, dass ein Befehl erfolgreich war , ein Nicht-Null- Beendigungsstatus zeigt einen Fehler an .
Um zu überprüfen, welcher Fehlercode vom Befehl zurückgegeben wird, können Sie
$?
nach dem Beenden eines Shell-Skripts den letzten Exit-Code drucken oder${PIPESTATUS[@]}
eine Liste der Exit-Statuswerte aus der Pipeline (in Bash) anzeigen.Es gibt keine vollständige Liste aller Exit-Codes, die gefunden werden können. Es wurde jedoch versucht, die Exit-Statusnummern in der Kernel-Quelle zu systematisieren. Dies ist jedoch hauptsächlich für C / C ++ - Programmierer gedacht, und ein ähnlicher Standard für die Skripterstellung ist möglicherweise angebracht.
Eine Liste von Sysexits unter Linux und BSD / OS X mit bevorzugten Exit-Codes für Programme (64-78) finden Sie in
/usr/include/sysexits.h
(oder:man sysexits
unter BSD):Die obige Liste weist zuvor nicht verwendete Beendigungscodes von 64 bis 78 zu. Der Bereich der nicht zugewiesenen Ausstiegscodes wird in Zukunft weiter eingeschränkt.
Die oben genannten Werte werden jedoch hauptsächlich in sendmail verwendet und von so gut wie niemand anderem verwendet, sodass sie nicht in der Nähe eines Standards liegen (wie von @Gilles angegeben ).
In der Shell lauten die Exit-Status wie folgt (basierend auf Bash):
1
-125
- Befehl wurde nicht erfolgreich abgeschlossen. Überprüfen Sie die Manpage des Befehls auf die Bedeutung des Status, einige Beispiele unten:1
- Abhilfe bei allgemeinen FehlernBeispiel:
2
- Missbrauch von Shell-Builtins (laut Bash-Dokumentation)Beispiel:
6
- Kein solches Gerät oder keine solche AdresseBeispiel:
124
- Kommando läuft ab125
- Wenn ein Befehl selbst fehlschlägt, siehe: coreutils126
- wenn der Befehl gefunden, aber nicht aufgerufen werden kann (zB nicht ausführbar)Beispiel:
127
- Wenn ein Befehl nicht gefunden werden kann, gibt der zur Ausführung erstellte untergeordnete Prozess diesen Status zurückBeispiel:
128
- Ungültiges Argument anexit
Beispiel:
128
-254
- Schwerwiegendes Fehlersignal "n" - Befehl wurde aufgrund eines empfangenen Signals abgebrochen. Der Signalcode wird zu 128 (128 + SIGNAL) hinzugefügt, um den Status zu erhalten (Linux:,man 7 signal
BSD:man signal
Einige Beispiele:130
- Befehl abgebrochen, weil Strg-C gedrückt wurde, 130-128 = 2 (SIGINT)Beispiel:
137
- Wenn Befehl dasKILL(9)
Signal (128 + 9) gesendet wird , sonst der Beendigungsstatus des Befehls141
-SIGPIPE
- Schreiben auf einer Pfeife ohne LesegerätBeispiel:
143
- Befehl mit Signalcode 15 beendet (128 + 15 = 143)Beispiel:
255
* - Status außerhalb des Bereichs verlassen.Beispiel:
Beachten Sie, dass Exit-Werte außerhalb des Bereichs zu unerwarteten Exit-Codes führen können (z. B. gibt Exit 3809 einen Exit-Code von 225, 3809% 256 = 225).
Sehen:
quelle
errno
Werte werden von System-APIs verwendet, sie werden nicht als Exit-Status verwendet (sie befinden sich nicht einmal im richtigen Bereich) und sind für Shell-Skripte irrelevant. Sysexits-Werte stammen von sendmail und werden von so gut wie niemand anderem verwendet. Sie sind nichts, was in der Nähe eines Standards liegt.Sie müssen sich den Code / die Dokumentation ansehen. Was einer "Standardisierung" jedoch am nächsten kommt, ist errno.h
quelle
errno.h
ist irrelevant, wenn es um Exit-Codes geht, nur um Fehlermeldungen.sysexits.h
. Einige Programme geben jedocherrno
s zurück, und ich denke tatsächlich, dass das Zurückgeben vonerrno
s am sinnvollsten ist. Nicht behandelteerrno
s breiten sich wie Ausnahmen nach oben aus (die Stayserrno
, Funktionen kehren z . B.-1
oder zurück0|NULL
). Da Programme nur Funktionen sind, obwohl Funktionen in einem separaten Adressraum ausgeführt werden, ist es sinnvoll, dass ein Programm möglicherweise dieerrno
Weitergabe über die Prozessgrenze fortsetzen möchte ."($numeric_code|$bsd_decoded|$errno_plus_one_decoded)"
.Soweit ich weiß, gibt es nur zwei mehr oder weniger Standardwerte - beide sind
stdlib.h
für die Verwendung mit exit () definiert:Und der einzige de-facto-Standardwert, der für alle Programme der Welt dieselbe Bedeutung hat, ist 0 (Null), was für SUCCESS steht.
Verschiedene Programme führen unterschiedliche Listen der zurückgegebenen "Fehler" -Codes ein, um unterschiedliche Fehler (unterschiedliche Typen oder Schweregrade) zu unterscheiden oder hervorzuheben. Einige Programme verwenden den zurückgegebenen Wert sogar, um die ganzzahlige Anzahl der erkannten Laufzeitfehler zu melden (z. B. die Anzahl der fehlgeschlagenen Komponententests in der Klage).
Ich würde nicht empfehlen, irgendeine Art von "neuem Standard" einzuführen, der die
stdlib.h
quelle