Texto colorido configurado com PS1 e saída colorida de comandos bagunçam uns aos outros

Texto colorido configurado com PS1 e saída colorida de comandos bagunçam uns aos outros

Eu tenho PS1que 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=autode 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=automudar 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 PS1com 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 guakeconfiguraçõ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 PS1prompt 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.

informação relacionada