O texto colorido configurado com o PS1 e a saída colorida dos comandos mexem um no outro

5

Eu tenho PS1 que termina com uma seqüência de cores de abertura (como \[\e[0;32m\] ) para ter todo o texto no terminal colorido (verde neste caso). No entanto, quando eu uso um comando como ls (que é aliado para ls --color=auto no meu .bashrc ), as cores na saída são um pouco confusas: verde até a primeira palavra "colorida" e as seguintes texto sem cor é branco em vez de verde.

Existe uma maneira de ter saída limpa em todos os casos? Eu estou bem com branco como cor de texto "padrão" quando a saída tem cores, mas eu gostaria que fosse consistente.

É claro que eu gostaria mais de uma solução que se aplicasse automaticamente a todos os comandos e que não exigisse que eu mudasse a maneira como os invoco.

Pessoalmente, não tenho ideias. Talvez algo possa ser feito para procurar sequências de escape na saída "on the fly" e executar algumas substituições? Eu não sei como implementar isso, especialmente, para que seja feito "nos bastidores".

    
por Lev Levitsky 08.06.2012 / 17:11

3 respostas

5

O motivo é porque você está fazendo errado.

Você disse que tem uma seqüência de cores "aberta" no final do seu prompt. Isto está errado. As cores não aninham . Não há "abrir" e "fechar". É "mudar para ..." ou "redefinir para padrão" (que é na verdade "mudar para 0"). Então, quando ls --color=auto muda de cor para algo quando é feito, ele emitirá a sequência para redefinir para o padrão. Não é "voltar ao que era antes".

Defina o terminal para usar a cor do texto que você deseja que seja "padrão" (ou seja, o número da paleta 0). Então, se você deseja que seu prompt tenha uma cor diferente, defina-a no início e redefina no final.

Para mais informações, leia o Bash Prompt HOWTO Capítulo 6. ANSI Escape Sequences: Cores e Movimento do Cursor

    
por 08.06.2012 / 19:07
2

Como foi respondido antes, ter uma PS1 terminando com uma sequência de cores de abertura não é uma boa ideia. Isso fará com que a saída de comandos coloridos esteja errada. Se você deseja que sua cor de primeiro plano do terminal (a cor normal do texto) esteja verde, basta defini-la como verde nas configurações do emulador de terminal em ambas as máquinas - nesse caso, as configurações do terminal guake . Desta forma, a cor do primeiro plano permanece verde e os comandos com saída colorida usarão essa cor para exibir o texto normal. Redefina seu prompt PS1 como deveria ser feito com \[\e[0m\] .

    
por 09.06.2012 / 14:17
2

Veja como faço prompts de cores diferentes para máquinas diferentes.

case $HOSTNAME in
    host1*) PSC="\e[32m" ;;
    host2*) PSC="\e[33m" ;;
    host3*) PSC="\e[34m" ;;
    host4*) PSC="\e[35m" ;;
    *) PSC="\e[36m" ;;
esac

PS1="[\j]\[${PSC}\]\u@\h(\l) \[\e[37m\][ \w ]\[\e[00m\]\n\[\e[1m\]\#\[\e[0m\] \$ "

O resto você pode suite a gosto. Coloque uma cópia deste ~ / .bashrc em todas as máquinas que você usa. Se você usa uma casa montada em NFS, é apenas automático.

    
por 09.06.2012 / 14:56