Co oznacza opcja --color = auto dla GNU grep?


14

AFAICT, ani strona podręcznika dla GNU grep, ani też nie info grepraczy przeliterować, co --color=autoto znaczy.

Muszę być jedną z niewielu osób na planecie, dla których znaczenie tej opcji nie jest od razu oczywiste.

Podejrzewam, że --color=auto„jest GDZIEŚ pomiędzy” --color=neveri --color=always, ale wciąż pozostawia to zbyt wiele nieokreślonych.

Odpowiedzi:


14

Reguły są takie same, jak w przypadku ls, co dokumentuje to lepiej man ls. Cytowanie:

Używanie koloru do rozróżniania typów plików jest domyślnie wyłączone, a
przy użyciu opcji --color = never. Przy opcji --color = auto ls emituje kody kolorów tylko wtedy, gdy
standardowe wyjście jest podłączone do terminala. Zmienna środowiskowa LS_COLORS
może zmieniać ustawienia. Aby to ustawić, użyj polecenia dircolors.

Dzięki temu polecenie doda formatowanie kolorów tylko wtedy, gdy dane wyjściowe trafią do terminala, a nie, powiedzmy, kiedy przejdzie do potoku, w którym program korzystający z potoku może nie obsługiwać dobrze formatowania kolorów.


3
Tak, główne czasy, w których na to wpadłem, były mniejsze. Jeśli używasz less -R, możesz uzyskać podświetlanie dopasowania, ale musisz określić --color=alwaysgrep, aby działało.
Holloway,

10

Ponieważ grepjest to program GNU, inną opcją może być sprawdzenie kodu źródłowego.


Wewnętrznie grep testuje static int color_optionna albo 0, 1albo 2.

  • 0 nigdy nie używaj kolorowych wyników
  • 1 zawsze używaj kolorów
  • 2 używaj kolorów tylko podczas drukowania na terminalu

Teraz, gdy przekazujesz --color=autogrep jako argument w twoim CLI, wewnętrznie ustawia zmienną color_optionna 2.

Jeśli color_optionjest równy, należy 2 grepdalej STDOUTtestować, czy jest on połączony z terminalem, czy użytkownik wyłączył pokolorowane miejsce za pośrednictwem shell environment variables. Jeśli pierwsza z nich jest prawdziwa, a grepwydruki CLIw kolorze są dozwolone, następnie kontynuuje ocenę, które kolory należy zastosować, a na końcu ostatecznie drukuje na swój kolor.


źródło: (grep 2.21)

grep.c line 306, 2374, 2440
colorize-posix.c line 36
man isatty 
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.