O que significa a opção --color = auto para o GNU grep?

11

AFAICT, nem a página man do GNU grep , nem info grep , se destinam a soletrar o que significa --color=auto .

Eu devo ser uma das poucas pessoas no planeta para as quais o significado desta opção não é imediatamente óbvio.

Suponho que --color=auto "seja EM ALGUM LUGAR entre" --color=never e --color=always , mas isso ainda não é muito especificado.

    
por kjo 18.10.2015 / 14:57

2 respostas

12

As regras são as mesmas que para ls , o que faz um trabalho melhor documentando-o em man ls . Citando:

Using color to distinguish file types is disabled both by default and
with --color=never. With --color=auto, ls emits color codes only when
standard output is connected to a terminal. The LS_COLORS environment
variable can change the settings. Use the dircolors command to set it.

Por isso, o comando só adicionará a formatação de cor quando a saída estiver indo para um terminal e não, digamos, quando estiver indo para um duto onde o programa que consome o duto pode não manipular bem a formatação de cores.

    
por 18.10.2015 / 15:04
7

Como grep é um programa GNU, outra opção pode ser dar uma olhada no código-fonte.

Internamente, o grep testa o static int color_option para 0 , 1 ou 2 .

  • 0 nunca usa saída colorida
  • 1 sempre usa cores
  • 2 só usa cores ao imprimir em um terminal

Agora, quando você entrega --color=auto ao grep como um argumento em sua CLI, ele define internamente a variável color_option to 2 .

Se color_option for igual a 2 grep , será necessário testar se STDOUT está vinculado a um terminal ou se o usuário desativou a saída colorida por shell environment variables . Se a primeira for true e a saída colorida for permitida, grep continuará avaliando quais cores deverão ser usadas e, no final, finalmente, imprimirá na sua CLI em cores.

source: (grep 2.21)

grep.c line 306, 2374, 2440
colorize-posix.c line 36
man isatty 
    
por 18.10.2015 / 16:34

Tags