O que há de errado com este prompt bash?

2

Eu uso a seguinte entrada no arquivo ~/.bashrc para colorir o prompt e exibir a ramificação 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 bash history (seta para cima algumas vezes), a linha de comando fica 'outdented' (apenas os primeiros caracteres do prompt permanecem intocados), e o visível é:

usemmand

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

    
por takeshin 04.06.2010 / 16:40

3 respostas

2

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
    
por 04.06.2010 / 17:50
4

\[ e \] só devem ser usados em torno de partes do prompt de comando que não avança o cursor, apesar de ter texto real. Se __git_ps1 produzir qualquer saída visível, isso desincronizará sua linha de comando.

    
por 04.06.2010 / 16:47
1

Qualquer pessoa que trabalhe com essa questão, aqui está o exemplo que funcionou para mim:

ANTES:

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

DEPOIS:

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

Observa todo o '\[\]' em torno das cores.

    
por 08.03.2012 / 19:14