Tonin menunjukkan bug di prompt default saya . Contoh minimal:
Setel PS1:
PS1='$(exit_code=$?; [[ $exit_code -eq 0 ]] || printf %s $(tput setaf 1) $exit_code $(tput sgr0) " ")$ '
Pada titik ini, prompt terlihat seperti ini:
$
Sekarang picu output kode keluar dengan menjalankan:
false
Sekarang prompt berisi kode keluar berwarna merah di awal baris:
1 $
- Tekan Ctrl- r.
Ketik "false". Sekarang prompt hanya berisi pencarian:
(reverse-i-search)`false': false
- Tekan Enter.
Sejarah terminal yang dihasilkan sekarang berisi yang berikut:
1 $ch)`false': false
Output yang diharapkan:
1 $ false
Artinya, tampaknya hasil pencarian riwayat dicampur dengan prompt dan menyembunyikan perintah aktual yang dijalankan.
Saya mencoba mengatasinya dengan menggunakanPROMPT_COMMAND
:
set_exit_code() {
exit_code=$?
[[ $exit_code -eq 0 ]] || printf %s $(tput setaf 1) $exit_code $(tput sgr0) " "
}
set_bash_prompt() {
PS1='$(set_exit_code)$ ' # Double quotes give the same result
}
PROMPT_COMMAND=set_bash_prompt
Ini sepertinya tidak berfungsi - garis terlihat persis sama seperti sebelumnya setelah mencari dan menjalankan.
Bagaimana saya bisa memperbaikinya?