Apa arti dari nilai pengembalian 127 dari $? dalam UNIX.
Apa arti dari nilai pengembalian 127 dari $? dalam UNIX.
Jawaban:
Nilai 127 dikembalikan oleh /bin/sh
ketika perintah yang diberikan tidak ditemukan dalam PATH
variabel sistem Anda dan itu bukan perintah built-in shell. Dengan kata lain, sistem tidak memahami perintah Anda, karena tidak tahu di mana menemukan biner yang Anda coba panggil.
which [program]
untuk melihat biner OS mana yang digunakan. Jika muncul kosong, langkah selanjutnya adalah memeriksa bit eksekusi dan PATH.
which
tidak terlalu akurat - ia tidak tahu tentang alias, fungsi shell, memoisasi pencarian PATH, atau faktor internal lainnya ke keadaan shell. Jauh lebih baik untuk digunakan type
, shell builtin yang mengetahui semua hal itu.
126
( Permission denied
), tidak 127
ketika saya mencoba untuk memanggil file yang tidak dapat dieksekusi (terlepas dari isinya); sama halnya, upaya untuk mengeksekusi direktori juga menghasilkan 126
( is a directory
).
127 - command not found
contoh: $ caat Pesan kesalahan akan
pesta:
caat: perintah tidak ditemukan
sekarang Anda periksa menggunakan echo $?
Sebuah konvensi shell adalah bahwa executable yang sukses harus keluar dengan nilai 0. Hal lain dapat diartikan sebagai kegagalan semacam, pada bagian dari bash atau executable Anda yang baru saja berlari. Lihat juga $ PIPESTATUS dan bagian EXIT STATUS di halaman bash man:
For the shell’s purposes, a command which exits with a zero exit status has succeeded. An exit status of zero indicates success. A non-zero exit status indicates failure. When a command terminates on a fatal signal N, bash uses the value of 128+N as the exit status.
If a command is not found, the child process created to execute it returns a status of 127. If a com-
mand is found but is not executable, the return status is 126.
If a command fails because of an error during expansion or redirection, the exit status is greater than
zero.
Shell builtin commands return a status of 0 (true) if successful, and non-zero (false) if an error
occurs while they execute. All builtins return an exit status of 2 to indicate incorrect usage.
Bash itself returns the exit status of the last command executed, unless a syntax error occurs, in
which case it exits with a non-zero value. See also the exit builtin command below.
Tidak memiliki arti khusus, selain itu proses terakhir untuk keluar melakukannya dengan status keluar 127.
Namun, ini juga digunakan oleh bash (dengan asumsi Anda menggunakan bash sebagai shell) untuk memberi tahu Anda bahwa perintah yang Anda coba jalankan tidak dapat dieksekusi (yaitu tidak dapat ditemukan). Sayangnya itu tidak dapat langsung dikurangkan, jika proses keluar dengan status 127, atau jika tidak dapat ditemukan.
EDIT:
Tidak dapat langsung dikurangkan, kecuali untuk output di konsol, tapi ini stack overflow, jadi saya menganggap Anda melakukan ini dalam sebuah skrip.
Kesalahan ini terkadang menipu. Dikatakan file tidak ditemukan meskipun file tersebut memang ada. Bisa jadi karena karakter khusus yang tidak dapat dibaca yang ada dalam file yang dapat disebabkan oleh editor yang Anda gunakan. Tautan ini mungkin membantu Anda dalam kasus-kasus seperti itu.
-bash: ./my_script: / bin / bash ^ M: interpreter buruk: Tidak ada file atau direktori
Cara terbaik untuk mengetahui apakah ini masalah adalah dengan menempatkan pernyataan gema di seluruh file dan memverifikasi apakah ada kesalahan yang sama.
Jika Anda mencoba menjalankan program menggunakan bahasa scripting, Anda mungkin perlu menyertakan path lengkap bahasa scripting dan file yang akan dieksekusi. Sebagai contoh:
exec('/usr/local/bin/node /usr/local/lib/node_modules/uglifycss/uglifycss in.css > out.css');
Jika mainframe IBM JCL memiliki beberapa karakter atau angka tambahan di akhir nama skrip unix yang dipanggil, maka ia dapat melempar kesalahan tersebut.