Onde colocar os caracteres de escape? [duplicado]

0

Eu tentei alterar meu prompt editando o .bashrc:

export PS1="\e[0;32m[\u@\h \W]\$ \e[m"

Isso parece funcionar, mas ctrl-r para acessar o histórico inverso acaba com minha digitação não aparecendo no mesmo lugar que será interpretado (como esta questão ). É bom usar as setas para cima ou para baixo para selecionar os comandos anteriores.

Eu dei uma olhada nessa pergunta, mas não consigo descobrir onde aplicar os caracteres de escape no meu prompt. Eu tentei algumas combinações, mas depois quebrei a funcionalidade normal de digitação de texto ou simples back / forward através do histórico.

Se você pudesse incluir uma explicação de quais instâncias de caracteres precisam escapar e por quê, isso me ajudaria (e espero que outras pessoas) aprendam.

    
por SilverlightFox 09.12.2016 / 16:58

1 resposta

3

O shell precisa saber quanto espaço o prompt ocupa na tela. Qualquer seqüência de caracteres que não ocupa espaço na tela precisa ser escapada usando \[ e \] : isso inclui seqüências de escape, como aquelas usadas para definir a cor, ou dar um título ao janela do terminal ou mover o cursor. .

Assim, no seu caso:

export PS1="\[\e[0;32m\][\u@\h \W]\$ \[\e[m\]"

diz ao shell que apenas [\u@\h \W]$ ocupam espaço na tela.

    
por 09.12.2016 / 17:05