Beendigungscode 128, was ist der Grund?

10114
P K

Per Definition bedeutet Exit-Code 128 "ungültiges Exit-Argument". Aber ich bekomme immer 255 (Exit-Status außerhalb des Bereichs), falls das Argument ungültig ist, wie die Float-Nummer.

Ist dies die proprietäre Implementierung in meiner Linux-Distribution?

# exit 1.234 exit bash: exit: 1.234: numeric argument required  $ echo $? 255 //this should be 128?  # exit -1 exit  $ echo $? 255 //this is okay 
3

2 Antworten auf die Frage

4
Darren Hall

In der Bash-Dokumentation steht nichts, 128was den erforderlichen ungültigen Beendigungscode angibt.

Bash selbst gibt den Exit-Status des zuletzt ausgeführten Befehls zurück, sofern kein Syntaxfehler auftritt. In diesem Fall wird er mit einem Wert ungleich Null beendet.

Der letzte Befehl ist der bash builtin exit(von der Manpage)

exit [n]

Bewirkt, dass die Shell mit dem Status n beendet wird. Wenn n nicht angegeben wird, ist der Beendigungsstatus der letzte ausgeführte Befehl.

Geprüfte Spezifikation für WEXITSTATUS.

WEXITSTATUS (stat_val)

Wenn der Wert von WIFEXITED (stat_val) nicht Null ist, wird dieses Makro mit den niedrigwertigen 8 Bits des Statusarguments ausgewertet, das der untergeordnete Prozess an _exit () oder exit () übergeben hat, oder den Wert, den der untergeordnete Prozess von main zurückgegeben hat ().

So Ausgang ist mit einem 8 - Bit - Integer beschränkt (0 - 255), so -1wäre 255. Exit versteht nur ein Integer-Argument und keine Float-Werte. Daher wird wahrscheinlich ein Standardwert ausgegeben -1.

bash$ echo $BASH_VERSION 4.1.10(4)-release  bash$ exit foo exit bash: exit: foo: numeric argument required $ echo $?  255  bash$ exit 2 exit $ echo $? 2  bash$ exit -2 exit $ echo $? 254 
1
kubanczyk

Dies ist spezifisch für Ihre Shell-Variante. Diese http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_08 oder http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#exit bestätigen dies nicht 128 ist ein spezieller Exit-Code.

Für exit 3.45meine Versionen von ksh und zsh return 3 gibt tcsh 1 zurück (wird nicht tatsächlich beendet), und ash gibt 2 zurück (aber auch nicht tatsächlich).

Abgesehen von einigen Exitcodes sind Exitcodes nicht standardisiert. Auch 0 bedeutet Erfolg,> 0 bedeutet eine Art Fehler. fpmurphy1 vor 12 Jahren 1