Antworten:
Mit --color=auto
grep werden übereinstimmende 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 daran erstickt).
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 angesehen werden.
Mit --color=auto
der neuesten Grep für Windows- Version (2.5.4) sowie der ursprünglichen Version 2.5.4, auf der es basiert, wird die Ausgabe genau dann eingefärbt, wenn die Bedingung erfüllt ist
isatty(STDOUT_FILENO) && getenv("TERM") && strcmp(getenv("TERM"), "dumb")
ist wahr, dh genau dann, wenn die Ausgabe in ein Terminal geschrieben wird, wird die UmgebungsvariableTERM
definiert und das Terminal ist nicht dumm .
Dies führt unter Windows nicht zum gewünschten Verhalten, da TERM
es normalerweise nicht definiert ist. Eine einfache Lösung für dieses Problem ist das Einstellen des TERM=windows
Bedienfelds.
Die neueste Version von grep (2.14) behebt dieses Problem, indem die Ausgabe genau dann eingefärbt wird, wenn die Bedingung erfüllt ist
isatty(STDOUT_FILENO) && should_colorize()
ist wahr, wo should_colorize()
für POSIX und Win32 unterschiedlich definiert ist:
Für erstere entspricht die Bedingung der von 2.5.4; Für letztere muss die Umgebungsvariable TERM
nicht gesetzt werden (kann es einfach nicht sein dumb
).
sdgstd.h
, wird istty(stdout)
zurückgegeben, 0
wenn die Ausgabe in eine Datei umgeleitet wird.
grep
und less
aus dem GnuWin-Projekt (gnuwin32.sourceforge.net). cmd.exe
wird mit dem ansicon
Dienstprogramm verbessert . less --color=auto
Funktioniert wie erwartet: Verwendet Farbe, wenn keine Umleitung angewendet wird, und nicht, wenn die Ausgabe umgeleitet wird. Druckt grep --color=auto
aber in beiden Fällen keine Escape-Sequenzen.