Setiap perintah yang dijalankan di bash kembali dengan kode keluar.
Setiap kali saya mengetik perintah pada bash prompt, saya ingin itu menunjukkan status keluar, yaitu, echo $?
mis., jika saya menjalankan echo "hello";
bash prompt, hasilnya harus:
linux@linux$ hello
linux@linux$ 0
Jawaban:
Kode keluar dari perintah yang dieksekusi terakhir disimpan dalam
$?
variabel lingkungan. Jadi Anda hanya dapat menambahkan variabel ini ke prompt perintah default dan Anda akan selalu memiliki kode keluar yang dicetak di sana. Prompt disimpan dalam$PS1
variabel lingkungan. Awalnya diatur dalam/etc/bash.bashrc
skrip dan kemudian di$HOME/.bashrc
.Jadi edit baris dalam
$HOME/.bashrc
(/etc/bash.bashrc
akan menjadi sistem lebar) dari nilai defaultnya:untuk ini (misalnya):
Jadi prompt default di diubah menjadi:
Angka 0 di dalam tanda kurung adalah kode keluar Anda, lihat:
Untuk artinya lihat http://www.tldp.org/LDP/abs/html/exitcodes.html
sumber
readlink /proc/$$/exe
tolong? 0 berarti tidak ada kesalahan, sudahkah Anda mencoba sesuatu yang memberikan kesalahan:^C
ataufalse
atauasdasdasd
?PS1=$(printf "%s\\\\u@\h:%s%s\w[$?]$%s " "$yellow" "$end" "$blue" "$end")
, tetapi hanya menunjukkan0
sepanjang waktu. Ada yang tahu kenapa?$?
sudah diperluas ke0
saat mengatur AndaPS1
. Lakukanecho $PS1
dan Anda akan melihat. Anda harus menggunakan tanda kutip tunggal, atau menghindarinya seperti\$?
.Cara lain yang saya pilih dari Arch Wiki adalah menggunakan
trap
:Efek:
sumber
Ini adalah contoh sederhana:
Jika menggunakan tanda kutip ganda, maka Anda harus menambahkan garis miring terbalik untuk menghindari
$
:Keluaran:
Cara yang lebih baik lagi adalah dengan hanya mencetak kode keluar ketika bukan nol.
Output sampel:
Penjelasan:
${var#pattern}
adalah perluasan parameter bash yang berarti menghapus pola pencocokan terpendek dari depan $ var. Jadi dalam hal ini, kami menghapus0
dari depan$?
, yang akan secara efektif memotong kode keluar0
.Jika menggunakan tanda kutip ganda,
$?
akan diganti ketikaPS1
diatur, bukannya dievaluasi setiap kali. Lakukanecho $PS1
untuk mengonfirmasi bahwa Anda tidak memiliki nilai hardcodePS1
.sumber