Cosa significa l'opzione --color = auto per GNU grep?


14

AFAICT, né la pagina man di GNU grep, né info grep, si degna di precisare cosa --color=autosignifichi.

Devo essere una delle pochissime persone sul pianeta per le quali il significato di questa opzione non è immediatamente evidente.

Suppongo che --color=auto"sia QUALCOSA in mezzo" --color=nevere --color=always, ma che lascia ancora troppo non specificato.

Risposte:


14

Le regole sono le stesse di ls, che fa un lavoro migliore documentandolo man ls. citando:

L'uso del colore per distinguere i tipi di file è disabilitato sia per impostazione predefinita che
con --color = never. Con --color = auto, ls emette codici colore solo quando
l'uscita standard è collegata a un terminale. La
variabile d' ambiente LS_COLORS può modificare le impostazioni. Utilizzare il comando dircolors per impostarlo.

Quindi farà sì che il comando aggiunga la formattazione del colore solo quando l'output sta andando su un terminale e non, diciamo, quando sta andando su una pipe in cui il programma che consuma la pipe potrebbe non gestire bene la formattazione del colore.


3
Sì, i tempi principali in cui mi sono imbattuto in questo sono stati i tubi in meno. Se lo usi less -Rpuoi ottenere l'evidenziazione della partita ma devi specificare --color=alwaysa grep perché funzioni.
Holloway,

10

Poiché grepè un programma GNU, un'altra opzione potrebbe essere dare un'occhiata al codice sorgente.


Internamente test grep le static int color_optionsia per 0, 1o 2.

  • 0 non usare mai output colorato
  • 1 usa sempre i colori
  • 2 usare i colori solo quando si stampa su un terminale

Ora quando --color=autopassi a grep come argomento nella tua CLI, imposta internamente la variabile color_optionsu 2.

Se è color_optionuguale, 2 grepverifica ulteriormente se STDOUTè collegato a un terminale o l'utente ha disabilitato l'outpit colorato tramite shell environment variables. Se il primo è vero e l'output colorato è consentito, grepcontinua con la valutazione dei colori da utilizzare e alla fine stampa infine sul tuo CLIcolore.


fonte: (grep 2.21)

grep.c line 306, 2374, 2440
colorize-posix.c line 36
man isatty 
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.