Tonin ha segnalato un errore nel mio prompt predefinito . Esempio minimo:
Imposta PS1:
PS1='$(exit_code=$?; [[ $exit_code -eq 0 ]] || printf %s $(tput setaf 1) $exit_code $(tput sgr0) " ")$ '
A questo punto, il prompt è simile al seguente:
$
Ora attiva l'output del codice di uscita eseguendo:
false
Ora il prompt contiene il codice di uscita in rosso all'inizio della riga:
1 $
- Premere Ctrl- r.
Digita "false". Ora il prompt contiene solo la ricerca:
(reverse-i-search)`false': false
- Press Enter.
La cronologia dei terminali risultante ora contiene quanto segue:
1 $ch)`false': false
Uscita prevista:
1 $ false
Cioè, sembra che l'output della ricerca della cronologia sia mescolato con il prompt e che nasconda il comando effettivo che è stato eseguito.
Ho provato a aggirare questo usandoPROMPT_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
Questo non sembra funzionare - la linea sembra esattamente la stessa di prima dopo la ricerca e l'esecuzione.
Come posso risolvere questo problema?