Suas atribuições para PROMPT_LAST_EXIT_STATUS
não estão sendo citadas. Por isso, você não está colocando \[
e \]
na sequência. Você está colocando apenas [
e ]
(porque \
s estão sendo tratados como caracteres de escape).
Compare:
$ foo=\[hello\]
$ echo "$foo"
[hello]
Vs:
$ foo="\[hello\]"
$ echo "$foo"
\[hello\]
Não apenas isso: expansão de parâmetro (a interpolação de variáveis na cadeia de prompt) ocorre após a expansão de caracteres especiais de prompt. Portanto, colocar o \[
e o \]
na variável PROMPT_LAST_EXIT_STATUS
não funcionará, já que quando o $PROMPT_LAST_EXIT_STATUS
for expandido, o \[
e o \]
não serão mais especiais. Uma alternativa de trabalho iria mover a configuração de cor para ser incondicional, algo como:
prompt_last_exit_status () {
PROMPT_LAST_EXIT_STATUS="${?}"
if [[ ${PROMPT_LAST_EXIT_STATUS} == "0" ]]
then
PROMPT_LAST_EXIT_STATUS=
else
PROMPT_LAST_EXIT_STATUS+=" "
fi
}
prompt_command () {
prompt_last_exit_status
}
export PROMPT_COMMAND=prompt_command
PS1="\[$(tput setaf 1)$(tput bold)\]\${PROMPT_LAST_EXIT_STATUS}\[$(tput sgr0)\]"
PS1+="\[$(tput setaf 6)$(tput bold)\]\w"
PS1+="\[$(tput sgr0)\] \$ \[$(tput sgr0)\]"
export PS1