O que há de errado com esse prompt do bash?

O que há de errado com esse prompt do bash?

Eu uso a seguinte entrada no ~/.bashrcarquivo para colorir o prompt e exibir o branch atual do repositório git:

PS1='\[\e[1;32m\]\[\u@\h\]\[\e[m\] \[\w\]\[\e[1;1m\]\[$(__git_ps1 " (%s)")\] \[\e[1;1m\]\[$\] \[\e[m\]'

Isso funciona quase bem, exceto quando eu uso o histórico do bash (tecla de seta para cima algumas vezes), a linha de comando fica 'desamassada' (apenas os primeiros caracteres do prompt permanecem intactos) e o visível é:

usemmand

quando meu nome de usuário é usere o comando é command.

Responder1

\[e \]só deve ser usado em partes do prompt de comando quenãoavançar o cursor, apesar de ter texto real. se __git_ps1produzir alguma saída visível, isso dessincronizará sua linha de comando.

Responder2

Esta é a versão correta:

COLOR1="\[\e[1;32m\]"
COLOR2='\[\e[1;1m\]'
COLOR3='\[\e[m\]'
GIT_STATUS=$(__git_ps1 " %s")
PROMPT_CHAR="$"

PROMPT="${COLOR1}\u@\h${COLOR3} \w${COLOR2}${GIT_STATUS} ${COLOR2}${PROMPT_CHAR} ${COLOR3}"
PS1="$PROMPT"
export PS1

Responder3

Qualquer pessoa que trabalhe com esse problema, aqui está o exemplo que funcionou para mim:

ANTES:

export PS1="\033[0;33m[\u@\h]\033[1m\e[m \w \033[36m[>>]\033[0m\e[m "

DEPOIS:

export PS1='\[\033[0;34m\][\u@\h]\[\033[1m\e[m\] \w \[\033[35m\][>>]\[\033[0m\e[m\] '

Observa todas '\\[\\]'as cores.

informação relacionada