Você precisa agrupar os códigos de cores em \[
e \]
PS1='\[\e[0;36m\]$ \w \[\e[m\]'
Além disso, o PS1 é relevante apenas para o seu shell interativo, você não precisa exportá-lo para processos filho.
Estou na nova instalação do Lubuntu 14.04. Estou usando o LXTerminal e este é o prompt que estou configurando através do arquivo .bashrc:
export PS1="\e[0;36m$ \w \e[m"
Suponha que eu digite um comando de até 15 caracteres (e execute para que ele seja registrado no histórico) (não importa o "comando não encontrado"):
$ ~ 012345678901234
012345678901234: command not found
Agora, se eu pressionar a seta para cima, recebo meu comando de volta:
$ ~ 012345678901234
E se eu pressionar a seta para baixo, volto ao prompt:
$ ~
O PROBLEMA O problema começa se eu tiver 16 ou mais caracteres para executar:
$ ~ 0123456789012345
0123456789012345: command not found
Agora, quando eu pressiono a seta para cima, sou apresentado com o comando anterior bem:
$ ~ 0123456789012345
Pressionar a seta para baixo não me traz de volta ao prompt, ele de alguma forma memoriza 10 caracteres do primeiro comando de mais de 16 caracteres no meu histórico e o exibe até que qualquer outra coisa seja executada. Ele basicamente se torna meu prompt padrão por enquanto.
$ ~ 0123456789
Agora posso pressionar voltar para me livrar dele, ou posso executar qualquer outro comando. Por exemplo, isto:
$ ~ 0123456789ls
Desktop Documents Downloads Music Pictures Public Templates Videos
O que posso fazer para corrigir isso? Não é tão grande assim, mas é muito chato.
Você precisa agrupar os códigos de cores em \[
e \]
PS1='\[\e[0;36m\]$ \w \[\e[m\]'
Além disso, o PS1 é relevante apenas para o seu shell interativo, você não precisa exportá-lo para processos filho.