Tonin señaló un error en mi mensaje predeterminado . Ejemplo mínimo:
Establecer PS1:
PS1='$(exit_code=$?; [[ $exit_code -eq 0 ]] || printf %s $(tput setaf 1) $exit_code $(tput sgr0) " ")$ '
En este punto, el indicador se ve así:
$
Ahora active la salida del código de salida ejecutando:
false
Ahora el mensaje contiene el código de salida en rojo al comienzo de la línea:
1 $
- Presione Ctrl- r.
Escriba "falso". Ahora el mensaje contiene solo la búsqueda:
(reverse-i-search)`false': false
- Presione Enter.
El historial del terminal resultante ahora contiene lo siguiente:
1 $ch)`false': false
Rendimiento esperado:
1 $ false
Es decir, parece que el resultado de la búsqueda del historial se mezcla con la solicitud y oculta el comando real que se ejecutó.
Intenté solucionar esto 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
Esto no parece funcionar: la línea se ve exactamente igual que antes después de buscar y ejecutar.
¿Cómo puedo arreglar esto?