Tonin , varsayılan istemimdeki bir hataya dikkat çekti . Minimal örnek:
PS1'i ayarlayın:
PS1='$(exit_code=$?; [[ $exit_code -eq 0 ]] || printf %s $(tput setaf 1) $exit_code $(tput sgr0) " ")$ '
Bu noktada, bilgi istemi şöyle görünür:
$
Şimdi çalıştırarak çıkış kodu çıkışını tetikleyin:
false
Şimdi istem satırın başında çıkış kodunu kırmızı renkte içerir:
1 $
- Basın Ctrl- r.
"False" yazın. Şimdi bilgi istemi yalnızca aramayı içerir:
(reverse-i-search)`false': false
- Düğmesine basın Enter.
Ortaya çıkan terminal geçmişi şimdi aşağıdakileri içerir:
1 $ch)`false': false
Beklenen çıktı:
1 $ false
Yani, geçmiş arama çıktısı komut istemiyle karıştırılmış ve çalıştırılan gerçek komutu gizliyor gibi görünüyor .
Bunu kullanarakPROMPT_COMMAND
bu soruna geçici bir çözüm denedim :
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
Bu işe yaramıyor gibi görünüyor - çizgi arama ve çalıştırmadan önce eskisi gibi görünüyor.
Bunu nasıl düzeltebilirim?