O que a opção grep --color = auto faz?

8

Qual efeito o auto como opção para a opção --color tem no grep? Quando o grep decide colorir as strings correspondentes e quando não decide?

    
por Trolzen 01.11.2012 / 18:22

1 resposta

12

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 ).

    
por 01.11.2012 / 18:28