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é TERMnormalmente non è definito. Una soluzione semplice a questo problema è l'impostazione TERM=windowsnel 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 TERMnon deve essere impostata (semplicemente non può essere dumb).
sdgstd.h, viene istty(stdout)restituito 0se l'output viene reindirizzato a un file.
grepe lessdal progetto GnuWin (gnuwin32.sourceforge.net). cmd.exeè migliorato con l' ansiconutilità. less --color=autofunziona come previsto: usa il colore quando non viene applicato il reindirizzamento e non quando viene reindirizzato l'output. Ma grep --color=autonon stampa le sequenze di escape in entrambi i casi.