
Eu tenho PS1
que termina com uma sequência de cores de abertura (como \[\e[0;32m\]
) para ter todo o texto do terminal colorido (verde neste caso). No entanto, quando eu uso um comando como ls
(que tem o alias ls --color=auto
de my .bashrc
), as cores na saída ficam um pouco confusas: verde até a primeira palavra "colorida" e o seguinte texto sem cor é branco em vez de verde.
Existe uma maneira de obter uma saída limpa em todos os casos? Aceito o branco como cor de texto "padrão" quando a saída tem cores, mas 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 realizar algumas substituições? Não sei como implementar isso, especialmente para que seja feito "nos bastidores".
Responder1
A razão é porque você está fazendo errado.
Você disse que tem uma sequência de cores "aberta" no final do prompt. Isto está errado. Coresnão aninhe. Não existe “abrir” e “fechar”. É "mudar para ..." ou "redefinir para o padrão" (que na verdade é "mudar para 0"). Então, quando ls --color=auto
mudar de cor para algo quando terminar, ele emitirá a sequência para redefinir para o padrão. Não é “voltar ao que era antes”.
Configure o terminal para usar a cor do texto que você deseja que seja "padrão" (ou seja, paleta número 0). Então, se você quiser que seu prompt tenha uma cor diferente, defina-o no início e reinicie no final.
Para obter mais informações, leia o Bash Prompt HOWTOCapítulo 6. Sequências de escape ANSI: cores e movimento do cursordocumentação.
Responder2
Conforme respondido anteriormente, terminar PS1
com uma sequência de cores de abertura não é uma boa ideia. Isso tornará a saída dos comandos coloridos incorreta. Se você deseja que a cor de primeiro plano do terminal (a cor normal do texto) seja verde, basta configurá-la para verde nas configurações do emulador de terminal em ambas as máquinas - neste caso, as guake
configurações do terminal. Desta forma, a cor do primeiro plano permanece verde e os comandos com saída colorida usarão esta cor para exibir o texto normal. Redefina seu PS1
prompt como deveria ser feito com \[\e[0m\]
.
Responder3
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 suíte a gosto. Coloque uma cópia deste ~/.bashrc em cada máquina que você usa. Claro, se você usar uma casa montada em NFS, é apenas automático.