Que signifie l'option --color = auto pour GNU grep?


14

AFAICT, ni la page de manuel de GNU grep, ni info grep, ne daigne expliquer ce que cela --color=autosignifie.

Je dois être l'une des rares personnes sur la planète pour laquelle le sens de cette option n'est pas immédiatement évident.

Je présume que --color=auto"est quelque part entre les deux" --color=neveret --color=always, mais cela laisse encore trop de choses non spécifiées.

Réponses:


14

Les règles sont les mêmes que pour ls, ce qui permet de mieux documenter cela man ls. Citant:

L'utilisation de la couleur pour distinguer les types de fichiers est désactivée par défaut et
avec --color = never. Avec --color = auto, ls n'émet des codes de couleur que lorsque
la sortie standard est connectée à une borne. La variable d'environnement LS_COLORS
peut modifier les paramètres. Utilisez la commande dircolors pour le définir.

Ainsi, la commande ajoutera la mise en forme des couleurs uniquement lorsque la sortie sera envoyée à un terminal et non, par exemple, lorsqu'elle se dirigera vers un tuyau où le programme consommant le tuyau pourrait ne pas bien gérer la mise en forme des couleurs.


3
Ouaip, les principales fois où je suis tombé sur ça étaient moins. Si vous utilisez, less -Rvous pouvez obtenir la mise en surbrillance des correspondances, mais vous devez spécifier --color=alwaysgrep pour que cela fonctionne.
Holloway

10

Puisqu'il greps'agit d'un programme GNU, une autre option pourrait être de jeter un œil au code source.


Grep en interne teste le static int color_optionpour 0, 1ou 2.

  • 0 ne jamais utiliser de sortie colorisée
  • 1 toujours utiliser des couleurs
  • 2 utiliser uniquement des couleurs lors de l'impression sur un terminal

Maintenant, lorsque vous passez --color=autoà grep comme argument sur votre CLI, il définit en interne la variable color_optionsur 2.

Si color_optionest égal à, 2 grepalors d'autres tests permettent de savoir s'il STDOUTest lié à un terminal ou si l'utilisateur a désactivé la sortie colorisée via shell environment variables. Si la première est vraie et que la sortie colorisée est autorisée, grepcontinue ensuite l'évaluation des couleurs à utiliser et, finalement, imprime sur votre CLIcouleur.


source: (grep 2.21)

grep.c line 306, 2374, 2440
colorize-posix.c line 36
man isatty 
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.