Backspace apaga o prompt do Bash

6

Recentemente, modifiquei meu prompt do Bash por meio da variável $PS1 para que eu pudesse ter cor. Está no meu arquivo .bashrc :

PS1="\[\e[0;32m[\h::\W] >>\e[m "

Agora, se eu digitar algo e depois precisar retroceder para apagá-lo, todo o prompt desaparecerá. Se eu apertar enter, um novo aparece.

Analisando esta questão sobre o mesmo problema , parece que estou em falta um suporte de fechamento. Eu não sei onde iria, no entanto.

    
por theillien 16.08.2014 / 05:19

1 resposta

10

No começo eu pensei que as barras invertidas escapariam entre aspas duplas e esse era o problema, mas, pensando bem, "\[" é equivalente a '\[' , então esse não é o caso - seria tem trabalhado dessa maneira.

Mas o verdadeiro problema era que readline não sabia quantos caracteres haviam sido desenhados na tela e quantos eram interceptados como escapes terminais. De fato, é provável que o prompt no tenha sido impresso porque seu prompt consistia no que era essencialmente uma string de aspas abertas.

Então, como observei no comentário, você precisava fechar a sequência. O \[ significa começar a seqüência de escape não imprimível no prompt - é tão readline pode acompanhar quantos caracteres são desenhados na tela. Você também precisa terminar como:

PS1='\[non-printing terminal escapes here\]' 

man bash 2>/dev/null | grep '^ *\\[' -A5

\[     begin  a  sequence  of   non-printing
       characters,  which  could  be used to
       embed  a  terminal  control  sequence
       into the prompt
\]     end  a sequence of non-printing char‐
       acters
    
por 16.08.2014 / 06:21

Tags