O Bash substitui a primeira linha ao usar o prompt personalizado do PS1 [duplicado]

2

Minha pergunta é semelhante, mas diferente de esta pergunta .

Eu criei um PS1 personalizado no meu .bashrc , da seguinte forma:

STARTCOLOR='\e[0;36m';
ENDCOLOR="\e[0m"
export PS1="\n$STARTCOLOR\u@\h:\! <\t> \w\n\$ $ENDCOLOR"

Que parece assim (mas com cor, claro):

tony@home:515 <17:04:52> ~/IdeaProjects/SomeProject
$ gedit ~/.bashrc

Primeiramente, notei o problema ao vincular meu projeto ao meu repositório do git remoto. Eu esperava o seguinte (não é um repo real, claro):

$ git remote add origin https://[email protected]/tony/someproject.git

Mas, em vez disso, recebi (note que até mesmo substituiu parte do meu PS1):

project.gitte add origin https://[email protected]/tony/some

Os comandos ainda funcionam, mesmo com essa estranheza visual.

tl; dr Quando tenho comandos longos que excedem uma única linha, a segunda linha sobrescreve a primeira. Alguma idéia por quê?

    
por AutonomousApps 16.07.2015 / 23:24

1 resposta

5

Enrole suas seqüências de escape de cores em \[ e \] (como mencionado na resposta à pergunta que você vinculou) para marcá-las como caracteres não imprimíveis.
Dessa forma, bash não os contará em relação ao tamanho do prompt ao calcular após quantos caracteres ele deve ser movido para uma nova linha.

STARTCOLOR='\e[0;36m'
ENDCOLOR="\e[0m"
export PS1="\n\[$STARTCOLOR\]\u@\h:\! <\t> \w\n\$ \[$ENDCOLOR\]"
    
por 16.07.2015 / 23:37