Eu encontrei a resposta em askubuntu.com . @qeirha mencionou que você precisa dizer ao bash que a sequência de caracteres não deve ser contada no comprimento do prompt, e você faz isso colocando-o em \[
\]
. Com base no exemplo fornecido, aqui está uma solução:
red=$(tput setaf 1)
reset=$(tput sgr0)
[ "$PS1" = "\s-\v\\$ " ] && PS1='$(exit_code=$?; [[ $exit_code -eq 0 ]] || printf %s \[$red\] $exit_code \[$reset\] " ")$ '