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

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

Qual o efeito de autouma opção para o --colorswitch 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 ambienteTERMestá definido e o terminal não estáburro.

Isto não produzirá o comportamento desejado no Windows, pois TERMnormalmente não está definido. Uma solução fácil para este problema é configurar TERM=windowsno 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 TERMnão precisa ser definida (simplesmente não pode ser dumb).

informação relacionada