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.