Ich bin verwirrt über die Bedeutung des Exit-Codes am Ende eines Bash-Skripts: Ich weiß, dass der Exit-Code 0 bedeutet, dass er erfolgreich abgeschlossen wurde und dass es noch viele weitere Exit-Code-Nummern gibt (127, wenn ich mich nicht irre?).
Meine Frage ist, ob der Exit-Code 0 am Ende eines Skripts angezeigt wird. Erzwingt er den Exit-Code als 0, auch wenn das Skript fehlgeschlagen ist, oder hat er eine andere Bedeutung?
bash
shell-script
exit
exit-status
Gehackt
quelle
quelle
exit 0
, wird es mit dem Beendigungscode 0 beendet, unabhängig davon, was im Skript passiert.exit 0
, wird es nur dann mit dem Code 0 beendet, wenn diese letzte Anweisung ausgeführt wurde. Die einzige Auswirkungexit 0
am Ende des Skripts besteht darin, 0 anstelle des Status der vorherigen Anweisung zurückzugeben.Antworten:
Der eingebaute Befehl beendet
exit
die Shell (aus Bashs Referenz ):Das Ausführen bis zum Ende der Datei wird ebenfalls beendet, wobei der Rückkehrcode des letzten Befehls zurückgegeben wird. Ja, ein Finale
exit 0
bewirkt, dass das Skript mit erfolgreichem Status beendet wird, unabhängig vom Beendigungsstatus der vorherigen Befehle. (Das heißt, vorausgesetzt, das Skript erreicht das Finaleexit
.) Am Ende eines Skripts können Sie auchtrue
oder verwenden:
, um einen Exit-Code von Null zu erhalten.Natürlich verwenden Sie öfter
exit
von innen anif
, um das Skript in der Mitte zu beenden.Diese sollten eine 1 ausgeben (
$?
enthält den vom vorherigen Befehl zurückgegebenen Exit-Code):Während dies eine 0 ausgeben sollte:
Ich bin nicht sicher, ob das Konzept des Skripts beim Ausführen von
exit
sinnvoll ist, da es durchaus möglich ist, dass einige vom Skript ausgeführte Befehle fehlschlagen, das Skript selbst jedoch erfolgreich ist. Es liegt an dem Autor des Skripts, zu entscheiden, was ein Erfolg ist und was nicht.Der Standardbereich für Exit-Codes ist 0..255. Codes über 127 werden von der Shell verwendet, um einen Prozess anzuzeigen, der durch ein Signal beendet wird. Sie können jedoch auf die übliche Weise zurückgegeben werden. Der
wait
Systemaufruf gibt tatsächlich einen breiteren Wert zurück, wobei der Rest vom Betriebssystem gesetzte Statusbits enthält.quelle
$?
wird. In diesem Fall sind nur einige Shells auf 128 + signum eingestellt. Siehe Standard-Exit-Code, wenn der Prozess beendet wird. für Details.exit 0
gibt nur 0 zurück, wenn der Exit ausgeführt wird. (es könnte auf einem anderen Weg abfahren).0 bedeutet Erfolg, positive ganze Zahlen bedeuten Misserfolg. Es gibt 255 verschiedene Fehlercodes, aber Werte 126 und höher sind reserviert, um anzuzeigen, dass ein Programm nicht gestartet werden konnte (126 oder 127) oder von einem Signal (129 und höher) beendet wurde. Siehe Standard-Exit-Code, wenn der Prozess beendet wird. und Welche Return / Exit-Werte kann ich in Bash-Funktionen / Skripten verwenden? für mehr Informationen.
Der Beendigungsstatus eines Shell-Skripts ist der Beendigungsstatus des letzten Befehls, den das Skript ausgeführt hat. Also zum Beispiel
Liefert den Exit-Status von
somecommand
, wohingegengibt 0 zurück, unabhängig davon, was
somecommand
zurückgegeben wurde. Dieses zweite Skript könnte auch geschrieben werdenWenn Sie
exit 0
am Ende eines Skripts einfügen, wird nicht unbedingt 0 zurückgegeben. Dadurch wird 0 nur dann zurückgegeben, wenn das Ende des Skripts erreicht ist. Das folgende Skript gibt beispielsweise immer 3 zurück:Das folgende Skript gibt zusätzlich zur Anzeige einer Meldung über einen Syntaxfehler immer einen Fehlercode zurück:
Das folgende Skript gibt je nach erstem Argument entweder 1 oder 0 zurück:
Das folgende Skript gibt den Status von zurück
somecommand
, daset -e
das Skript beendet wird, wenn einsomecommand
Fehler auftritt:quelle