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


14

AFAICT, nem a página de manual do GNU grep, nem info grepse digna de explicar o que --color=autosignifica.

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

Eu suponho que --color=auto"está em algum lugar no meio" --color=nevere --color=always, mas isso ainda deixa muito não especificado.

Respostas:


14

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

O uso de cores para distinguir tipos de arquivos é desativado por padrão e
com --color = never. Com --color = auto, ls emite códigos de cores somente quando a
saída padrão está conectada a um terminal. A
variável de ambiente LS_COLORS pode alterar as configurações. Use o comando dircolors para configurá-lo.

Portanto, ele fará com que o comando adicione apenas a formatação de cores quando a saída estiver indo para um terminal e não, digamos, quando estiver indo para um canal em que o programa que está consumindo o canal pode não lidar bem com a formatação da cor.


3
Sim, os principais momentos em que encontrei isso foram menos. Se você usar, less -Rpoderá obter o destaque da correspondência, mas precisará especificar --color=alwaysgrep para que funcione.
Holloway

10

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


Internamente testes grep os static int color_optionpara um ou outro 0, 1ou 2.

  • 0 nunca use saída colorida
  • 1 use sempre cores
  • 2 use somente cores ao imprimir em um terminal

Agora, quando você entregar --color=autoao grep como argumento em seu CLI, ele define internamente a variável color_optiona 2.

Se color_optioniguala 2 grep, testa mais se STDOUTestá vinculado a um terminal ou se o usuário desativou a saída colorida via shell environment variables. Se o primeiro for verdadeiro e a saída colorida for permitida, grepcontinue avaliando quais cores devem ser usadas e, finalmente, finalmente será impresso na sua CLIcor.


fonte: (grep 2.21)

grep.c line 306, 2374, 2440
colorize-posix.c line 36
man isatty 
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.