Apakah ada cara saya bisa melakukan apa yang dinyatakan dalam judul dari perintah terminal, atau apakah saya harus melihat ke dalam kode?
command
documentation
exit
tepat
sumber
sumber
Kode keluar menunjukkan kondisi kegagalan ketika mengakhiri program dan mereka jatuh antara 0 dan 255. Shell dan bawaannya dapat menggunakan terutama nilai-nilai di atas 125 untuk menunjukkan mode kegagalan tertentu, sehingga daftar kode dapat bervariasi antara shell dan sistem operasi (misalnya Bash menggunakan nilai 128 + N sebagai status keluar). Lihat: Bash - 3.7.5 Status Keluar atau
man bash
.Secara umum status keluar nol menunjukkan bahwa perintah berhasil , status keluar nol menunjukkan kegagalan .
Untuk memeriksa kode kesalahan mana yang dikembalikan oleh perintah, Anda dapat mencetak
$?
untuk kode keluar terakhir atau${PIPESTATUS[@]}
yang memberikan daftar nilai status keluar dari pipa (dalam Bash) setelah skrip shell keluar.Tidak ada daftar lengkap semua kode keluar yang dapat ditemukan, namun telah ada upaya untuk mensistematisasikan nomor status keluar dalam sumber kernel, tetapi ini dimaksudkan utama untuk programmer C / C ++ dan standar yang sama untuk skrip mungkin tepat.
Beberapa daftar sysexits di Linux dan BSD / OS X dengan kode keluar yang lebih baik untuk program (64-78) dapat ditemukan di
/usr/include/sysexits.h
(atau:man sysexits
di BSD):Daftar di atas mengalokasikan kode keluar yang sebelumnya tidak digunakan dari 64-78. Rentang kode keluar yang tidak dijanjikan akan dibatasi lebih lanjut di masa mendatang.
Namun nilai-nilai di atas terutama digunakan dalam sendmail dan digunakan oleh hampir tidak ada orang lain, sehingga mereka bukan sesuatu yang dekat dengan standar (seperti yang ditunjukkan oleh @Gilles ).
Dalam shell, status keluar adalah sebagai berikut (berdasarkan Bash):
1
-125
- Perintah tidak berhasil diselesaikan. Periksa halaman manual perintah untuk arti status, beberapa contoh di bawah ini:1
- Catchall untuk kesalahan umumContoh:
2
- Penyalahgunaan bawaan shell (menurut dokumentasi Bash)Contoh:
6
- Tidak ada perangkat atau alamat tersebutContoh:
124
- perintah habis125
- jika perintah itu sendiri gagal lihat: coreutils126
- jika perintah ditemukan tetapi tidak dapat dipanggil (mis. tidak dapat dieksekusi)Contoh:
127
- jika suatu perintah tidak dapat ditemukan, proses anak yang dibuat untuk menjalankannya mengembalikan status ituContoh:
128
- Argumen tidak valid untukexit
Contoh:
128
-254
- sinyal kesalahan fatal "n" - perintah mati karena menerima sinyal. Kode sinyal ditambahkan ke 128 (128 + SIGNAL) untuk mendapatkan status (Linuxman 7 signal
:, BSD:)man signal
, beberapa contoh di bawah ini:130
- perintah dihentikan karena Ctrl-C sedang ditekan, 130-128 = 2 (SIGINT)Contoh:
137
- jika perintah mengirimKILL(9)
sinyal (128 + 9), status keluar dari perintah sebaliknya141
-SIGPIPE
- tulis di pipa tanpa pembacaContoh:
143
- perintah diakhiri oleh kode sinyal 15 (128 + 15 = 143)Contoh:
255
* - keluar dari status di luar jangkauan.Contoh:
Harap perhatikan bahwa nilai keluar di luar rentang dapat menghasilkan kode keluar yang tidak terduga (misalnya, keluar 3809 memberikan kode keluar 225, 3809% 256 = 225).
Lihat:
sumber
errno
nilai-nilai digunakan oleh sistem API, mereka tidak digunakan sebagai status keluar (mereka bahkan tidak dalam kisaran yang tepat) dan mereka tidak relevan untuk skrip shell. Nilai Sysexits berasal dari sendmail dan digunakan oleh hampir tidak ada orang lain, mereka bukan sesuatu yang dekat dengan standar.Anda harus melihat ke dalam kode / dokumentasi. Namun hal yang paling dekat dengan "standardisasi" adalah errno.h
sumber
errno.h
tidak relevan ketika datang untuk keluar dari kode, hanya pesan kesalahan.sysexits.h
. Namun, beberapa program mengembalikanerrno
, dan saya benar-benar berpikir pengembalianerrno
adalah yang paling masuk akal. Unhandlederrno
s menyebar ke atas, seperti pengecualian, (errno
tetap, fungsi mengembalikan misalnya,-1
atau0|NULL
). Karena program hanya fungsi, meskipun fungsi yang dijalankan dalam ruang alamat yang terpisah, masuk akal bahwa program mungkin ingin melanjutkanerrno
propagasi melintasi batas proses."($numeric_code|$bsd_decoded|$errno_plus_one_decoded)"
.Sejauh yang saya tahu, hanya ada dua, lebih atau kurang, nilai standar - keduanya didefinisikan
stdlib.h
untuk digunakan dengan exit ():Dan satu-satunya nilai standar de-facto, yaitu, memiliki arti yang sama untuk semua program di dunia, adalah 0 (nol) yang merupakan kependekan dari SUKSES.
Program yang berbeda memperkenalkan daftar kode "kegagalan" yang dikembalikan untuk membedakan atau menekankan kesalahan yang berbeda (tipe atau tingkat keparahan berbeda). Beberapa program bahkan menggunakan nilai yang dikembalikan untuk melaporkan jumlah integer dari kesalahan runtime yang ditemukan (mis., Jumlah unit-tes yang gagal dalam gugatan).
Saya tidak akan merekomendasikan untuk memperkenalkan "standar baru" apa pun yang memperluas
stdlib.h
sumber