Qual o efeito de auto
uma opção para o --color
switch no grep? Quando o grep decide colorir as strings correspondentes e quando não?
Responder1
Comportamento esperado
Com --color=auto
, grep irá destacar as strings correspondentes se (e somente se) a saída for escrita diretamente no terminal e o referido terminal for capaz de exibir a saída colorida.
Normalmente, --color=auto
é o que você quer. Se, por exemplo, você usar grep para corresponder a uma URL e canalizá-la para o Wget, o Wget verá \e[1;31mhttp://...
em vez da URL real (e engasgará com ela).
Os seguintes comandos devem resultar em uma saída colorida:
echo Super User | grep --color=auto Super
echo Super User | grep --color=always Super | cat
Este comando, no entanto, não deve:
echo Super User | grep --color=auto Super | cat
Qualquer inconsistência com este comportamento deve ser considerada um bug.
Código fonte
Com --color=auto
, o mais recenteGrep para Windowsversão (2.5.4) – assim como o 2.5.4 original em que se baseia – colore a saída se e somente se a condição
isatty(STDOUT_FILENO) && getenv("TERM") && strcmp(getenv("TERM"), "dumb")
é verdadeiro, ou seja, se e somente se a saída estiver sendo escrita em um terminal, ovariável de ambienteTERM
está definido e o terminal não estáburro.
Isto não produzirá o comportamento desejado no Windows, pois TERM
normalmente não está definido. Uma solução fácil para este problema é configurar TERM=windows
no painel de controle.
A última versão dogrep(2.14) corrige esse problema colorindo a saída se e somente se a condição
isatty(STDOUT_FILENO) && should_colorize()
é verdade, onde should_colorize()
é definido de forma diferente para POSIX e Win32:
Para o primeiro, a condição equivale à de 2.5.4; para este último, a variável de ambiente TERM
não precisa ser definida (simplesmente não pode ser dumb
).