Saya bertanya-tanya bagaimana mengatur opsi untuk mencetak kembali nilai otomatis setelah setiap eksekusi program di terminal tanpa mengetik echo $?
.
Apakah ini sesuatu yang bisa diatur? Codeblocks memiliki fitur itu.
sumber
Saya bertanya-tanya bagaimana mengatur opsi untuk mencetak kembali nilai otomatis setelah setiap eksekusi program di terminal tanpa mengetik echo $?
.
Apakah ini sesuatu yang bisa diatur? Codeblocks memiliki fitur itu.
Ya, ada dua cara. Salah satunya adalah untuk set PROMPT_COMMAND
di .bashrc
, yang lain - untuk perintah substitusi set di PS1
untuk echo $?
perintah.
Metode 1:
Dari halaman manual bash:
PROMPT_COMMAND
If set, the value is executed as a command prior to issuing each primary prompt.
Apa pun yang Anda atur variabel ini, akan dijalankan sebelum menggambar prompt setiap kali. Demo:
$> PROMPT_COMMAND=" echo 'Last command exited with' \$? 'code' "
Last command exited with 0 code
$> ls /etc/passwd > /dev/null
Last command exited with 0 code
$> ls /etc/asdf > /dev/null
ls: cannot access /etc/asdf: No such file or directory
Last command exited with 2 code
$>
Perhatikan penggunaan \$?
. Untuk perubahan permanen, simpan di.bashrc
Metode 2
Misalkan PS1
prompt saya disetel seperti ini:
PS1='
user@ubuntu:$> '
Jika saya ingin menjalankan beberapa program setiap kali prompt ini digambar ulang di layar (yang setelah setiap perintah sebelumnya berjalan), saya perlu menggunakan command substitution $(. . .)
dan mengaturnya di prompt seperti:
PS1=' [ $? ]
user@ubuntu: $> '
Demo:
$> PS1=' [ $? ]
> $>_ '
[ 0 ]
$>_ ls /etc/passwd > /dev/null
[ 0 ]
$>_ ls /etc/asdf > /dev/null
ls: cannot access /etc/asdf: No such file or directory
[ 2 ]
$>_
Perhatikan bahwa saya membagi PS1 saya menjadi dua baris, akan atas [ exitcode ]
dan bawah $> <blank space>'
. Itulah sebabnya ada >
sebelumnya $> '
di baris kedua (Perintah memimpin >
adalah PS2
perintah multiline). Atau, Anda bisa melakukan sesuatu seperti ini (perhatikan $'...'
strukturnya):
$> PS1=$'[ $? ] \n$> '
[ 0 ]
$>
PS1
hanyalah teks yang sedang dicetak sebelum mendapatkan input pengguna - tidak lebih dari itu. Ini tidak kebal terhadap ekspansi parameter dan penggantian perintah, jadi Anda bisa memasukkan apa pun ke dalamnya$(...)
, misalnya$( pwd )
dan itu akan ditampilkan di sana. Saya telah menggunakannya dengan skrip khusus untuk menunjukkan daya baterai laptop, misalnyaMetode yang saya pilih dari Arch Wiki adalah untuk
trap
ERR
.trap
digunakan di Bash untuk menjalankan perintah ketika sinyal diterima, atau untuk acara tertentu lainnya. SebuahERR
perangkap berlari setiap kali baris perintah saat ini berakhir dengan kesalahan - nilai kembali tidak 0. (Jika itu mengakhiri normal, nilai kembali jelas akan menjadi 0.)Jadi, misalnya:
Kemudian:
(Catatan: tidak ada pesan setelah
echo
perintah yang berjalan dengan sukses - Apa artinya ketika saya mengetik perintah dan terminal tidak melakukan apa-apa? )Tip Arch Wiki melanjutkan dan mewarnai pesan, sehingga Anda mendapatkan pesan kuning yang terlihat:
Efek:
Akibatnya, yang perlu saya lakukan adalah mengawasi kuning
code
di output untuk mengetahui perintah gagal.sumber