Erwartetes Verhalten
Mit --color=auto
wird hervorgehobene Zeichenfolgen hervorgehoben, wenn (und nur wenn) die Ausgabe direkt in das Terminal geschrieben wird und das Terminal farbige Ausgaben anzeigen kann.
Normalerweise --color=auto
ist es das, was Sie wollen. Wenn Sie beispielsweise grep verwenden, um eine URL abzugleichen und an Wget weiterzuleiten, wird Wget \e[1;31mhttp://...
anstelle der tatsächlichen URL angezeigt (und verschluckt).
Die folgenden Befehle sollten zu einer farbigen Ausgabe führen:
echo Super User | grep --color=auto Super echo Super User | grep --color=always Super | cat
Dieser Befehl sollte jedoch nicht
echo Super User | grep --color=auto Super | cat
Jede Inkonsistenz mit diesem Verhalten sollte als Fehler betrachtet werden.
Quellcode
Mit --color=auto
der neuesten Version von Grep für Windows (2.5.4) - sowie dem Original 2.5.4, auf dem sie basiert - färben Sie die Ausgabe, wenn und nur dann, wenn die Bedingung vorliegt
isatty(STDOUT_FILENO) && getenv("TERM") && strcmp(getenv("TERM"), "dumb")
ist wahr, dh wenn und nur wenn die Ausgabe in ein Terminal geschrieben wird, wird die UmgebungsvariableTERM
definiert und das Terminal ist nicht dumm .
Dies führt nicht zu dem gewünschten Verhalten unter Windows, da TERM
es normalerweise nicht definiert ist. Eine einfache Lösung für dieses Problem ist die Einstellung TERM=windows
in der Systemsteuerung.
Die neueste Version von grep (2.14) behebt dieses Problem, indem die Ausgabe nur dann eingefärbt wird, wenn die Bedingung erfüllt ist
isatty(STDOUT_FILENO) && should_colorize()
ist wahr, wobei should_colorize()
für POSIX und Win32 anders definiert ist:
Für den ersteren entspricht die Bedingung der von 2.5.4; Für letzteres muss die Umgebungsvariable TERM
nicht gesetzt werden (kann es einfach nicht sein dumb
).