PS1 problema, atrapalhando o CLI

14

Eu fiz uma tarefa simples no PS1

PS1="\e[0;31m[\W]$ \e[m "

Tudo o que eu queria fazer era alterar a cor do prompt e exibir apenas o caminho relativo. No entanto, isso atrapalha o CLI. Por exemplo, quando o histórico de navegação com o corta e sobrepõe a exibição. Quando eu digito um comando longo, o cursor se move para o início da tela, sobrepondo-se à exibição do prompt. O que eu fiz de errado?

    
por yayu 10.03.2012 / 19:27

1 resposta

27

Isso porque o bash acha que o prompt é mais longo do que é. A seqüência de escape \e[0;31m , por exemplo, é sugada pelo terminal, que por sua vez torna o seguinte texto vermelho, mas bash não sabe disso. Portanto, você precisa dizer ao bash que essa sequência de caracteres não deve ser contada na duração do prompt, e você faz isso colocando-a em \[ \] . Eu também recomendo usar tput em vez de sequências de escape de terminal de codificação.

red=$(tput setaf 1)
reset=$(tput sgr0)
PS1='\[$red\][\W]$\[$reset\] '

Veja BashFAQ 53 e Introdução dos códigos de terminal (ANSI / VT100) para mais.

    
por geirha 10.03.2012 / 19:56