Was bedeutet die Option --color = auto für GNU grep?

14

AFAICT, weder die Manpage für GNU grepnoch info grep, legt dar, was es --color=autobedeutet.

Ich muss einer der wenigen Menschen auf dem Planeten sein, für die die Bedeutung dieser Option nicht sofort offensichtlich ist.

Ich vermute, dass --color=auto" irgendwo dazwischen ist" --color=neverund --color=always, aber das lässt immer noch zu viel nicht spezifiziert.

kjo
quelle

Antworten:

14

Die Regeln sind die gleichen wie für ls, wodurch eine bessere Dokumentation möglich ist man ls. Zitat:

Die Verwendung von Farbe zur Unterscheidung von Dateitypen ist sowohl standardmäßig als auch
mit --color = never deaktiviert. Bei --color = auto gibt ls nur dann Farbcodes aus, wenn die
Standardausgabe an ein Terminal angeschlossen ist. Die Umgebungsvariable LS_COLORS
kann die Einstellungen ändern. Verwenden Sie den Befehl dircolors, um ihn festzulegen.

Daher fügt der Befehl die Farbformatierung nur hinzu, wenn die Ausgabe an ein Terminal gesendet wird, und nicht, wenn die Ausgabe an eine Pipe gesendet wird, in der das Programm, das die Pipe verwendet, die Farbformatierung möglicherweise nicht richtig verarbeitet.

Eric Renouf
quelle
3
Ja, die Hauptzeiten, in denen ich darauf gestoßen bin, waren weniger. Wenn Sie verwenden less -R, können Sie die Hervorhebung von Übereinstimmungen erhalten, müssen jedoch angeben --color=always, dass grep verwendet werden soll, damit es funktioniert.
Holloway
10

Da grepes sich um ein GNU-Programm handelt, könnte eine andere Option darin bestehen, sich den Quellcode anzusehen.


Intern testet grep das static int color_optionentweder auf 0, 1oder 2.

  • 0 Verwenden Sie niemals farbige Ausgaben
  • 1 Verwenden Sie immer Farben
  • 2 Verwenden Sie Farben nur, wenn Sie auf einem Terminal drucken

Wenn Sie nun --color=autogrep als Argument in Ihrer CLI übergeben, wird die Variable intern color_optionauf gesetzt 2.

Wenn color_optiongleich, 2 grepwird weiter STDOUTgeprüft , ob eine Verbindung zu einem Terminal besteht oder das vom Benutzer deaktivierte eingefärbte Outpit über shell environment variables. Wenn die erstere zutrifft und eine farbige Ausgabe zulässig ist, grepfahren Sie mit der Bewertung fort, welche Farben verwendet werden sollen, und drucken Sie sie schließlich CLIin Farbe aus.


Quelle: (grep 2.21)

grep.c line 306, 2374, 2440
colorize-posix.c line 36
man isatty 
pidi
quelle