Respostas:
Com --color=auto, grep destacará as strings correspondentes se (e somente se) a saída for gravada diretamente no terminal e o referido terminal for capaz de exibir uma 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á em \e[1;31mhttp://...vez da URL real (e sufocará).
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 esse comportamento deve ser considerada um bug.
Com --color=auto, a versão mais recente do Grep for Windows (2.5.4) - assim como a versão 2.5.4 original - baseia a saída da cor se e somente se a condição
isatty(STDOUT_FILENO) && getenv("TERM") && strcmp(getenv("TERM"), "dumb")
é verdadeiro, isto é, se e somente se a saída estiver sendo gravada em um terminal, a variável de ambienteTERM é definida e o terminal não é burro .
Isso não produzirá o comportamento desejado no Windows, pois TERMnormalmente não está definido. Uma solução fácil para esse problema é configurá-lo TERM=windowsno 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()
é verdadeiro, onde should_colorize()é definido de maneira diferente para POSIX e Win32:
Para o primeiro, a condição é equivalente à de 2.5.4; para este último, a variável de ambiente TERMnão precisa ser definida (apenas não pode ser dumb).
sdgstd.h, istty(stdout)retornará 0se a saída for redirecionada para um arquivo.
grepe lessdo projeto GnuWin (gnuwin32.sourceforge.net). cmd.exeé aprimorado com ansiconutilidade. less --color=autofunciona como esperado: usa cores quando nenhum redirecionamento é aplicado e não quando a saída é redirecionada. Mas grep --color=autonão imprime seqüências de escape nos dois casos.