Por que meu prompt do bash está sendo grampeado quando eu navego pelo histórico? [duplicado]

50

Muitas vezes, quando começo a examinar o histórico de comandos, alguns dos caracteres de um comando exibido não são apagados, por exemplo:

O que está acontecendo:

prompt$ some_command
prompt$ some_commanother_command

O que deveria ter acontecido:

prompt$ some_command
prompt$ another_command

Não consigo apagar esses caracteres e o bash os ignora ao executar o comando. Eles também desaparecem quando um novo prompt é exibido (depois de pressionar Enter , por exemplo).

Eu perguntei a outras pessoas que trabalham com Linux no meu local de trabalho e eles disseram que eles têm esse problema às vezes também, mas eles não tinham uma ideia de como resolver esse problema.

Eu tenho o Ubuntu 11.10 e estou usando o guake. Aqui está o meu PS1 :

\e[0;31m\u \A ${PWD##*/}\e[0;32m$(parse_git_branch)\e[0;31m$\e[m

em que parse_git_branch é

parse_git_branch () {
    git name-rev HEAD 2> /dev/null | sed 's#HEAD\ \(.*\)# ()#'
}

Até onde eu sei, meus colegas têm esse problema mesmo com PS1 menos "chique".

    
por korda 11.01.2012 / 09:30

2 respostas

57

Use \[...\] em torno das partes do PS1 com comprimento 0. Isso ajuda o bash a obter a duração do prompt correto. Mesmo com esta medida, sua linha de comando pode ficar estragada ao usar caracteres multibyte (pelo menos o meu faz). Acertar Ctrl + L também ajuda em tais casos (mas limpa a tela ao mesmo tempo).

    
por 11.01.2012 / 09:38
7

Você precisa ter certeza de que está escapando de todos os caracteres não imprimíveis.

Bom

PS1="\[\e[36m\]\W ⇨ \[\e[m\] "

Ruim

PS1="\[\e[36m\]\W ⇨ [\e[m\] "
    
por 29.07.2017 / 12:55