kode keluar 128, apa alasannya?

3

Sesuai definisi, kode keluar 128 berarti 'argumen keluar tidak valid'. Tetapi saya selalu mendapatkan 255 (Keluar status di luar jangkauan) jika argumen tidak valid seperti angka float.

Apakah ini implementasi eksklusif pada distribusi linux saya?

# 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
P K
sumber

Jawaban:

4

Tidak ada apapun di dalam Dokumentasi Bash kata itu 128 adalah kode keluar yang tidak valid yang diperlukan.

Bash sendiri mengembalikan status keluar dari perintah terakhir yang dijalankan, kecuali kesalahan sintaksis terjadi, dalam hal ini keluar dengan nilai bukan nol.

Perintah terakhir adalah bash builtin exit (dari halaman manual)

keluar [n]

Menyebabkan shell keluar dengan status n. Jika n dihilangkan, status keluar adalah dari perintah terakhir yang dijalankan.

Diperiksa spesifikasi untuk WEXITSTATUS.

WEXITSTATUS (stat_val)

Jika nilai WIFEXITED (stat_val) adalah nol, makro ini mengevaluasi ke pesanan rendah 8 bit argumen status bahwa proses anak dilewatkan ke _exit () atau keluar (), atau nilai proses anak dikembalikan dari main ().

Jadi exit dibatasi untuk integer 8 bit (0 - 255), jadi -1 akan menjadi 255. Keluar hanya memahami argumen bilangan bulat dan tidak mengapung, sehingga kemungkinan menendang default -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
Darren Hall
sumber
1

Ini khusus untuk varian shell Anda. Ini http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_08 atau http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#exit jangan konfirmasikan kesan Anda bahwa 128 adalah beberapa kode keluar khusus.

Untuk exit 3.45 versi saya dari ksh dan zsh mengembalikan 3, tcsh mengembalikan 1 (tidak benar-benar keluar), dan abu mengembalikan 2 (tetapi juga tidak benar-benar keluar).

kubanczyk
sumber
1
Selain beberapa kode keluar, kode keluar tidak terstandarisasi. Juga 0 berarti sukses, & gt; 0 berarti semacam kegagalan.
fpmurphy