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 TERM
normalmente não está definido. Uma solução fácil para esse problema é configurá-lo 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()
é 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 TERM
não precisa ser definida (apenas não pode ser dumb
).
sdgstd.h
, istty(stdout)
retornará 0
se a saída for redirecionada para um arquivo.
grep
e less
do projeto GnuWin (gnuwin32.sourceforge.net). cmd.exe
é aprimorado com ansicon
utilidade. less --color=auto
funciona como esperado: usa cores quando nenhum redirecionamento é aplicado e não quando a saída é redirecionada. Mas grep --color=auto
não imprime seqüências de escape nos dois casos.