GNU/Linux >> Belajar Linux >  >> Linux

Kode keluar baris perintah bash didemistifikasi

Saat Anda menjalankan perintah atau menjalankan skrip, Anda menerima kode keluar . Kode keluar adalah respons sistem yang melaporkan keberhasilan, kesalahan, atau kondisi lain yang memberikan petunjuk tentang apa yang menyebabkan hasil yang tidak diharapkan dari perintah atau skrip Anda. Namun, Anda mungkin tidak pernah tahu tentang kode tersebut, karena kode keluar tidak akan muncul dengan sendirinya kecuali seseorang memintanya untuk melakukannya. Pemrogram menggunakan kode keluar untuk membantu men-debug kode mereka.

Catatan: Anda akan sering melihat kode keluar disebut sebagai status keluar atau bahkan saat keluar dari kode status . Istilah ini digunakan secara bergantian kecuali dalam dokumentasi. Semoga penggunaan kedua istilah tersebut jelas bagi Anda.

Saya bukan seorang pemrogram. Sulit bagi saya untuk mengakuinya, tetapi itu benar. Saya telah mempelajari BASIC, FORTRAN, dan beberapa bahasa lainnya baik secara formal maupun informal, dan saya harus mengatakan bahwa saya jelas bukan seorang programmer. Oh tentu, saya dapat membuat skrip dan memprogram sedikit di PHP, Perl, Bash, dan bahkan PowerShell (ya, saya juga seorang administrator Windows), tetapi saya tidak pernah bisa mencari nafkah di pemrograman karena saya terlalu lambat dalam menulis kode dan coba-coba bukanlah strategi debugging yang efisien. Sungguh menyedihkan, tetapi saya cukup kompeten dalam menyalin dan mengadaptasi kode yang ditemukan sehingga saya dapat menyelesaikan tugas-tugas yang saya perlukan. Namun, saya juga menggunakan kode keluar untuk mencari tahu di mana masalah saya dan mengapa ada yang salah.

[ Anda mungkin juga menyukai: Keajaiban penyalinan file SSH kecil di baris perintah. ]

Kode keluar berguna sampai batas tertentu, tetapi juga bisa tidak jelas. Misalnya, kode keluar 1 adalah keranjang umum untuk kesalahan lain-lain dan tidak membantu sama sekali. Dalam artikel ini, saya menjelaskan beberapa kode kesalahan yang dicadangkan , bagaimana itu bisa terjadi, dan bagaimana menggunakannya untuk mencari tahu apa masalah Anda. Kode kesalahan yang dicadangkan adalah kode yang digunakan oleh Bash dan Anda tidak boleh membuat kode kesalahan Anda sendiri yang bertentangan dengannya.

Cukup latar belakang. Saatnya melihat contoh apa yang menghasilkan kode/status kesalahan.

Mengekstrak kode keluar yang sulit dipahami

Untuk menampilkan kode keluar untuk perintah terakhir yang Anda jalankan di baris perintah, gunakan perintah berikut:

$ echo $?

Respons yang ditampilkan tidak mengandung kemegahan atau keadaan. Ini hanya sebuah angka. Anda mungkin juga menerima pesan kesalahan shell dari Bash yang menjelaskan kesalahan lebih lanjut, tetapi kode keluar dan kesalahan shell bersama-sama akan membantu Anda menemukan apa yang salah.

Keluar dari status 0

Status keluar 0 adalah skenario terbaik, secara umum. Ini memberi tahu Anda bahwa perintah atau skrip terbaru Anda berhasil dieksekusi. Keberhasilan itu relatif karena kode keluar hanya memberi tahu Anda bahwa skrip atau perintah dieksekusi dengan baik, tetapi kode keluar tidak memberi tahu Anda apakah informasi darinya memiliki nilai. Contoh akan lebih menggambarkan apa yang saya jelaskan.

Sebagai contoh, daftar file di direktori home Anda. Saya tidak memiliki apa pun di direktori home saya selain file dan direktori tersembunyi, jadi tidak ada yang bisa dilihat di sini, tetapi kode keluar tidak peduli tentang apa pun selain keberhasilan eksekusi perintah:

$ ls
$ echo $?
0

Kode keluar 0 berarti ls perintah berjalan tanpa masalah. Meskipun, sekali lagi, informasi dari kode keluar tidak memberikan nilai nyata bagi saya.

Sekarang, jalankan ls perintah pada /etc direktori dan kemudian tampilkan kode keluar:

$ ls /etc
**Many files**
$ echo $?
0

Anda dapat melihat bahwa eksekusi yang berhasil menghasilkan kode keluar 0, termasuk sesuatu yang benar-benar salah, seperti mengeluarkan cat perintah pada file biner yang dapat dieksekusi seperti ls perintah: 

$ cat /usr/bin/ls
**A lot of screen gibberish and beeping**
$ echo $?
0

Keluar dari status 1

Menggunakan contoh di atas tetapi menambahkan daftar panjang dan opsi rekursif (-lR ), Anda menerima kode keluar baru 1:

$ ls -lR /etc
**A lengthy list of files**
$ echo $?
1

Meskipun output perintah tampak seolah-olah semuanya berjalan dengan baik, jika Anda menggulir ke atas, Anda akan melihat beberapa kesalahan "Izin ditolak" dalam daftar. Error ini menghasilkan status keluar 1, yang dijelaskan sebagai "operasi yang tidak diizinkan". Meskipun Anda mungkin mengira bahwa kesalahan "Izin ditolak" mengakibatkan status keluar 1, Anda salah, seperti yang akan Anda lihat di bagian berikutnya.

Membagi dengan nol, bagaimanapun, memberi Anda status keluar 1. Anda juga menerima kesalahan dari shell untuk memberi tahu Anda bahwa operasi yang Anda lakukan adalah "tidak diizinkan:"

$ let a=1
$ let b=0
$ let c=a/b
-bash: let: c=a/b: division by 0 (error token is "b")
$ echo $?
1

Tanpa kesalahan shell, status keluar 1 tidak terlalu membantu, seperti yang Anda lihat dari contoh pertama. Pada contoh kedua, Anda tahu mengapa Anda menerima kesalahan karena Bash memberi tahu Anda dengan pesan kesalahan shell. Secara umum, ketika Anda menerima status keluar 1, cari operasi yang tidak diizinkan (Izin ditolak pesan) bercampur dengan kesuksesan Anda (seperti mencantumkan semua file di bawah /etc , seperti pada contoh pertama di bagian ini).

Keluar dari status 2

Seperti yang dinyatakan di atas, peringatan shell "Izin ditolak" menghasilkan status keluar 2 daripada 1. Untuk membuktikannya sendiri, coba daftarkan file di /root :

$ ls /root
ls: cannot open directory '/root': Permission denied
$ echo $?
2

Status keluar 2 muncul saat ada masalah izin atau kata kunci yang hilang dalam perintah atau skrip. Contoh kata kunci yang hilang adalah lupa menambahkan done dalam do script skrip lingkaran. Metode terbaik untuk debugging skrip dengan status keluar ini adalah dengan mengeluarkan perintah Anda di shell interaktif untuk melihat kesalahan yang Anda terima. Metode ini umumnya mengungkapkan di mana masalahnya.

Masalah izin sedikit lebih sulit untuk diuraikan dan di-debug daripada jenis masalah lainnya. Satu-satunya arti "Izin ditolak" adalah perintah atau skrip Anda mencoba melanggar batasan izin.

Keluar dari status 126

Status keluar 126 adalah kode kesalahan izin yang menarik. Cara termudah untuk mendemonstrasikan ketika kode ini muncul adalah dengan membuat file skrip dan lupa memberi izin eksekusi file itu. Ini hasilnya:

$ ./blah.sh
-bash: ./blah.sh: Permission denied
$ echo $?
126

Masalah izin ini bukan masalah akses, tetapi masalah pengaturan, seperti dalam mode. Untuk menghilangkan kesalahan ini dan menerima status keluar dari 0 sebagai gantinya, terbitkan chmod +x blah.sh .

Catatan: Anda akan menerima status keluar 0 bahkan jika file yang dapat dieksekusi tidak memiliki konten. Seperti yang dinyatakan sebelumnya, "sukses" terbuka untuk interpretasi.

Saya menerima status keluar 126. Kode ini sebenarnya memberi tahu saya apa yang salah, tidak seperti kode yang lebih kabur.

Keluar dari status 127

Status keluar 127 memberi tahu Anda bahwa salah satu dari dua hal telah terjadi:Baik perintah tidak ada, atau perintah tidak ada di jalur Anda ($PATH ). Kode ini juga muncul jika Anda mencoba menjalankan perintah yang ada di direktori kerja Anda saat ini. Misalnya, skrip di atas yang Anda berikan izin eksekusi ada di direktori Anda saat ini, tetapi Anda mencoba menjalankan skrip tanpa menentukan di mana letaknya:

$ blah.sh
-bash: blah.sh: command not found
$ echo $?
127

Jika hasil ini terjadi dalam skrip, coba tambahkan jalur eksplisit ke masalah yang dapat dieksekusi atau skrip. Ejaan juga diperhitungkan saat menentukan executable atau skrip.

[ Pembaca juga menikmati: 10 perintah dasar Linux yang perlu Anda ketahui. ]

Keluar dari status 128

Status keluar 128 adalah respons yang diterima ketika kode keluar di luar jangkauan digunakan dalam pemrograman. Dari pengalaman saya, status keluar 128 tidak memungkinkan untuk diproduksi. Saya telah mencoba beberapa tindakan sebagai contoh, dan saya tidak dapat mewujudkannya. Namun, saya dapat menghasilkan status keluar 128 kode yang berdekatan. Jika kode keluar Anda melebihi 256, status keluar yang dikembalikan adalah kode keluar Anda dikurangi 256. Hasil ini terdengar aneh dan sebenarnya dapat membuat status keluar yang salah. Periksa contoh untuk melihat sendiri.

Menggunakan kode keluar 261, buat status keluar 5:

$ bash
$ exit 261
exit
$ echo $?
5

Untuk menghasilkan status keluar yang salah 0:

$ bash
$ exit 256
exit
$ echo $?
0

Jika Anda menggunakan 257 sebagai kode keluar, status keluar Anda adalah 1, dan seterusnya. Jika kode keluar adalah angka negatif, status keluar yang dihasilkan adalah angka yang dikurangi 256. Jadi, jika kode keluar Anda adalah 20, maka status keluarnya adalah 236.

Mengganggu, bukan? Solusinya, bagi saya, adalah menghindari penggunaan kode keluar yang dicadangkan dan di luar jangkauan. Rentang yang tepat adalah 0-255.

Status keluar 130

Jika Anda menjalankan program atau skrip dan menekan Ctrl-C untuk menghentikannya, status keluar Anda adalah 130. Status ini mudah ditunjukkan. Masalah ls -lR / lalu langsung tekan Ctrl-C:

$ ls -lR /
**Lots of files scrolling by**
^C
$ echo $?
130

Tidak banyak lagi yang bisa dikatakan tentang yang satu ini. Ini bukan status keluar yang sangat berguna, tapi ini untuk referensi Anda.

Keluar dari status 255

Status keluar cadangan terakhir ini mudah dibuat tetapi sulit untuk ditafsirkan. Dokumentasi yang saya temukan menyatakan bahwa Anda menerima status keluar 255 jika Anda menggunakan kode keluar yang berada di luar rentang 0-255.

Saya telah menemukan bahwa status ini juga dapat dihasilkan dengan cara lain. Ini salah satu contohnya:

$ ip
**Usage info for the ip command**
  
$ echo $?
255

Beberapa otoritas independen mengatakan bahwa 255 adalah kode kesalahan kegagalan umum. Saya tidak bisa membenarkan atau menyangkal pernyataan itu. Saya hanya tahu bahwa saya dapat menghasilkan status keluar 255 dengan menjalankan perintah tertentu tanpa opsi.

[ Artikel terkait: 10 perintah Linux penting lainnya yang perlu Anda ketahui. ]

Menutup

Itu dia:Gambaran umum nomor status keluar yang dipesan, artinya, dan cara membuatnya. Saran pribadi saya adalah untuk selalu memeriksa izin dan jalur untuk apa pun yang Anda jalankan, terutama dalam skrip, daripada mengandalkan kode status keluar. Metode debug saya adalah ketika perintah tidak berfungsi dengan benar dalam skrip, saya menjalankan perintah satu per satu dalam shell interaktif. Metode ini bekerja jauh lebih baik daripada mencoba taktik mewah dengan jeda dan keluar. Saya memilih rute ini karena (sebagian besar waktu) kesalahan saya terkait dengan izin, jadi saya telah dilatih untuk memulai dari sana.

Bersenang-senang memeriksa status Anda, dan sekarang saatnya saya keluar.

[ Ingin mencoba Red Hat Enterprise Linux? Unduh sekarang secara gratis. ]


Linux
  1. Perbedaan Antara Operator Bash [[ Vs [ Vs ( Vs ((?

  2. Perbedaan Antara ' Dan ” Di Command Line (bash)??

  3. Bash Prompt dengan Kode Keluar Terakhir

  1. Keluar dari kode penugasan variabel ke substitusi perintah di Bash

  2. Bash:Ulangi hingga status keluar perintah sama dengan 0

  3. Apa yang dilakukan -e dalam bash shebang?

  1. Kiat bash untuk sehari-hari di baris perintah

  2. Cara Menghapus Riwayat Baris Perintah BASH di Linux

  3. Bagaimana Cara Mencari Kode Keluar Untuk Aplikasi?