Comportamento esperado
Com --color=auto
, o grep destacará strings correspondentes se (e somente se) a saída for gravada diretamente no terminal e o terminal for capaz de exibir a saída colorida.
Normalmente, --color=auto
é o que você deseja. Se, por exemplo, você usar o grep para corresponder a um URL e enviá-lo para o Wget, o Wget verá \e[1;31mhttp://...
em vez do URL real (e engasgará com ele).
Os seguintes comandos devem resultar em 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 erro.
Código-fonte
Com --color=auto
, a versão mais recente do Grep para Windows (2.5.4) - bem como a 2.5.4 original é baseado em - colora 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 está sendo gravada em um terminal, a variável de ambiente TERM
é definido e o terminal não é mudo .
Isso não produzirá o comportamento desejado no Windows, já que TERM
normalmente não está definido. Uma solução fácil para esse problema é definir o TERM=windows
no painel de controle.
A versão mais recente do grep (2.14) corrige esse problema colorindo a saída se e somente se a condição
isatty(STDOUT_FILENO) && should_colorize()
é true, onde should_colorize()
é definido de forma diferente para POSIX e Win32:
Para o primeiro, a condição é equivalente à de 2.5.4; para este último, a variável de ambiente TERM
não precisa ser definida (não pode ser dumb
).