Você esqueceu de quebrar o valor de $RESET
.
RESET='\[\e[0m\]'
O Bash precisa saber quanto tempo o prompt está para que o quebra automática de palavras funcione corretamente e que tudo não entre \[
e \]
seja contado.
Eu tenho o seguinte prompt bash:
YELLOW="\[3[0;33m\]"
GREEN="\[3[0;32m\]"
RESET='\e[0m'
export PS1="$GREEN[\W]$YELLOW \$(__git_ps1 \"(%s) \")$RESET\$ "
Parece assim:
Qual é o que eu quero. No entanto, quando eu insiro uma linha longa, ela não quebra a linha, mas substitui a atual desde o início da linha. Quando isso acontece e eu bati no backspace, tudo nessa linha desaparecerá. Como posso consertar isso?
Mais portátil usando tput
:
fgred="$(tput setaf 1)"
fggreen="$(tput setaf 2)"
fgyellow="$(tput setaf 3)"
fgblue="$(tput setaf 4)"
fgpurple="$(tput setaf 5)"
fgcyan="$(tput setaf 6)"
fgwhite="$(tput setaf 7)"
bgred="$(tput setab 1)"
bggreen="$(tput setab 2)"
bgyellow="$(tput setab 3)"
bgblue="$(tput setab 4)"
bgpurple="$(tput setab 5)"
bgcyan="$(tput setab 6)"
bgwhite="$(tput setab 7)"
bold="$(tput bold)"
underline="$(tput smul)"
reset="$(tput sgr0)"
export PS1="${fggreen}[\W]${fgyellow} \$(__git_ps1 \"(%s) \")${reset}\$ "
Tags command-line bash prompt