Saya bingung tentang arti kode keluar di akhir skrip bash: Saya tahu kode keluar 0 berarti selesai dengan sukses, dan ada banyak lagi nomor kode keluar (127 jika saya tidak salah?)
Pertanyaan saya adalah ketika melihat kode keluar 0 di akhir skrip, apakah itu memaksa kode keluar sebagai 0 bahkan jika skrip gagal atau apakah itu memiliki arti lain?
bash
shell-script
exit
exit-status
Pecah
sumber
sumber
exit 0
, itu akan keluar dengan kode keluar 0 terlepas dari apa yang terjadi dalam skrip.exit 0
, itu akan keluar dengan kode 0 hanya jika instruksi terakhir itu dijalankan. Satu-satunya dampakexit 0
pada akhir skrip adalah mengembalikan 0 alih-alih status dari instruksi sebelumnya.Jawaban:
Perintah builtin
exit
keluar dari shell (dari referensi Bash ):Berlari ke akhir file juga keluar, mengembalikan kode kembali dari perintah terakhir, jadi ya, final
exit 0
akan membuat skrip keluar dengan status berhasil terlepas dari status keluar dari perintah sebelumnya. (Yaitu, dengan asumsi skrip mencapai finalexit
.) Di akhir skrip Anda juga bisa menggunakantrue
atau:
untuk mendapatkan kode keluar nol.Tentu saja Anda akan lebih sering menggunakan
exit
dari dalamif
untuk mengakhiri skrip di tengah.Ini harus mencetak 1 (
$?
berisi kode keluar yang dikembalikan oleh perintah sebelumnya):Sementara ini harus mencetak 0:
Saya tidak yakin apakah konsep skrip "gagal" saat mengeksekusi
exit
masuk akal, karena sangat mungkin beberapa perintah yang dijalankan skrip gagal, tetapi skrip itu sendiri berhasil. Terserah penulis naskah untuk memutuskan mana yang sukses dan mana yang tidak.Juga, rentang standar untuk kode keluar adalah 0..255. Kode di atas 127 digunakan oleh shell untuk menunjukkan proses yang diakhiri oleh sinyal, tetapi mereka dapat dikembalikan dengan cara biasa. The
wait
system call sebenarnya mengembalikan nilai yang lebih luas, dengan sisa yang mengandung Status bit yang ditetapkan oleh sistem operasi.sumber
$?
ke 128 + signum dalam kasus itu. Lihat Kode keluar default saat proses dihentikan? untuk detail.exit 0
hanya akan mengembalikan 0, jika jalan keluar dijalankan. (itu bisa keluar dengan rute yang berbeda).0 berarti sukses, bilangan bulat positif berarti kegagalan. Ada 255 kode kesalahan yang berbeda, tetapi nilai 126 dan di atas dicadangkan untuk menunjukkan bahwa suatu program tidak dapat memulai (126 atau 127) atau terbunuh oleh sinyal (129 ke atas). Lihat Kode keluar default saat proses dihentikan? dan Nilai pengembalian / keluar apa yang dapat saya gunakan dalam fungsi / skrip bash? untuk informasi lebih lanjut.
Status keluar dari skrip shell adalah status keluar dari perintah terakhir yang dijalankan skrip. Jadi misalnya
mengembalikan status keluar
somecommand
, sedangkanmengembalikan 0 terlepas dari apa yang
somecommand
dikembalikan. Skrip kedua ini juga bisa ditulisMenempatkan
exit 0
di akhir skrip tidak selalu menyebabkannya kembali 0. Ini hanya membuatnya mengembalikan 0 ketika akhir skrip tercapai. Misalnya, skrip berikut selalu menghasilkan 3:Skrip berikut juga selalu mengembalikan kode kesalahan, selain menampilkan pesan tentang kesalahan sintaksis:
Script berikut mengembalikan 1 atau 0 tergantung pada argumen pertamanya:
Skrip berikut mengembalikan status
somecommand
, karenaset -e
menyebabkan skrip keluar jikasomecommand
gagal:sumber