Como alterar permanentemente as cores STDOUT e STDERR para cinza?

7

Esta questão é semelhante a Posso configurar meu shell para imprimir STDERR e STDOUT em cores diferentes?

Mas estou procurando uma solução que me permita alterar STDOUT e STDERR para UMA cor . Eu não estou tentando definir cores diferentes para STDOUT e STDERR, pois isso é problemático e pode criar problemas, mencionados na resposta do link acima.

Peço desculpas, pois não sei muito sobre Unix e Linux. Eu estou procurando uma solução que pode me permitir adicionar algumas linhas ao meu .bashrc ou .bash_profile e permanentemente alterar a cor de STDOUT e STDERR.

    
por user1769197 02.07.2014 / 18:09

3 respostas

8

STDOUT e STDERR não têm cores. O que tem cor é o seu terminal (emulador); tem um primeiro plano (e uma cor de fundo) definido de cada vez.

Também deve ser notado que STDOUT e STDERR não são singulares - eles são fluxos de saída por processo . Não há um STDOUT global que se aplique a todos os programas. Esses fluxos são roteados para o seu terminal, mas eles são distintos para cada processo.

Os emuladores de terminal geralmente têm maneiras de definir a paleta por meio de um menu, de modo que o padrão primeiro plano (aplicado a dados recebidos por meio de ambos streams STDOUT e STDERR) possa ser qualquer . Você também pode aplicar Códigos de cores ANSI no seu prompt e se você não redefinir a cor com \[3[0m\] no final, ela continuará sendo aplicada. Note que alguns aplicativos usam estes e redefinem, então este não é um método muito ideal, já que o reset irá retornar ao padrão do terminal.

Se definir o primeiro plano do terminal não for o que você deseja, você poderá filtrar STDOUT / STDERR em uma base por processo; veja as sugestões aqui .

    
por 02.07.2014 / 18:31
7

Com zsh nos terminais que suportam 16 cores ou mais à la xterm :

preexec() printf '\e[90m' # set foreground color to grey before running
                          # the command

precmd() printf '\e[m' # reset the foreground color before issuing the
                       # next prompt.

Observe que os comandos podem alterar a cor de primeiro plano do terminal.

    
por 02.07.2014 / 18:31
1

Esta parece ser uma questão com o problema XY - é não pedindo a coisa certa para obter a solução desejada:

Suponha que a saída é colorida e a parte vazia da tela é de cor diferente ou preenchida com um caractere.

Pense em como você espera que a saída procure esses casos:

Uma linha vazia ? Linhas preenchidas apenas com caracteres espaciais? Linhas com apenas um caractere espaço ? Com uma aba? Com um espaço e uma aba? Com uma aba e um espaço? Sim, todos parecem diferentes !

Ou você quer que uma linha vazia pareça - apenas uma linha vazia ?
Se esse for o caso, você não deseja realmente colorir os fluxos de saída e essa resposta se aplica .

Eu vou dar uma abordagem semelhante para a solução de @ StéphaneChazelas, mas "inversa":

Você pode , tecnicamente, colorir STDOUT e STDERR, linha por linha , adicionando os códigos de escape de cor certos para início e fim de linha em ambos os fluxos.

Você precisaria ter cuidado para redefinir a cor pelo menos em cada linha, porque, do contrário, qualquer programa que usa cores, como ls , atrapalharia seu terminal . < br> Você só tem pouco controle sobre a cor de saída - por isso é difícil acertar na melhor das hipóteses.

Mas: Você tem controle sobre todas as outras cores usadas, certo?
E você precisa apenas de uma cor nesse caso? Ótimo!

Defina a cor padrão dos terminais para a cor STDOUT / STDERR e cor o resto como preferir.

Você pode colorir o prompt de shell - e usar o código de prompt para colorir outras partes também.
É certo que é um pouco difícil colorir a linha de comando, onde você edita seu comando, mas é certamente possível. Mas não tente isso com bash se você puder usar zsh , como o código de tratamento de prompt muito mais flexível aqui - é disso que você precisará.

Agora, defina a cor de primeiro plano padrão dos seus terminais para cinza e possivelmente para plano de fundo, mas tente deixar isso como transparente / indefinido.

Para definir a cor de fundo da linha de comando, veja este exemplo Altere o cor de fundo da linha de comando em zsh quando altero o tema do prompt :

PROMPT="%{$bg[cyan]%}%{$fg[red]%}%n%{$reset_color%}%{$bg[cyan]%}@%{$fg[red]%}%m %{$fg[yellow]%}%~ %{$reset_color%}%{$bg[cyan]%}%% "

(A parte difícil é obter as seções finais não usadas de lins em várias situações certas.)

    
por 03.07.2014 / 01:22