Risposte:
Con --color=auto
, grep evidenzierà le stringhe corrispondenti se (e solo se) l'output viene scritto direttamente sul terminale e detto terminale è in grado di visualizzare output colorato.
Normalmente, --color=auto
è quello che vuoi. Se, ad esempio, usi grep per abbinare un URL e reindirizzarlo a Wget, Wget vedrà \e[1;31mhttp://...
invece l'URL effettivo (e si strozzerà).
I seguenti comandi dovrebbero generare un output colorato:
echo Super User | grep --color=auto Super
echo Super User | grep --color=always Super | cat
Questo comando, tuttavia, non dovrebbe:
echo Super User | grep --color=auto Super | cat
Qualsiasi incoerenza con questo comportamento deve essere considerata un bug.
Con --color=auto
, l'ultima versione di Grep per Windows (2.5.4) - così come l'originale 2.5.4 su cui si basa - colora l'output se e solo se la condizione
isatty(STDOUT_FILENO) && getenv("TERM") && strcmp(getenv("TERM"), "dumb")
è vero, cioè se e solo se l'output viene scritto su un terminale, la variabile di ambienteTERM
viene definita e il terminale non è stupido .
Ciò non produrrà il comportamento desiderato in Windows, poiché TERM
normalmente non è definito. Una soluzione semplice a questo problema è l'impostazione TERM=windows
nel pannello di controllo.
L'ultima versione di grep (2.14) risolve questo problema colorando l'output se e solo se la condizione
isatty(STDOUT_FILENO) && should_colorize()
è vero, dove should_colorize()
è definito in modo diverso per POSIX e Win32:
Per il primo, la condizione è equivalente a quella di 2.5.4; per quest'ultimo, la variabile ambientale TERM
non deve essere impostata (semplicemente non può essere dumb
).
sdgstd.h
, viene istty(stdout)
restituito 0
se l'output viene reindirizzato a un file.
grep
e less
dal progetto GnuWin (gnuwin32.sourceforge.net). cmd.exe
è migliorato con l' ansicon
utilità. less --color=auto
funziona come previsto: usa il colore quando non viene applicato il reindirizzamento e non quando viene reindirizzato l'output. Ma grep --color=auto
non stampa le sequenze di escape in entrambi i casi.