Jaki efekt ma auto
opcja --color
przełącznika w grep? Kiedy grep decyduje się pokolorować pasujące ciągi, a kiedy nie?
źródło
Jaki efekt ma auto
opcja --color
przełącznika w grep? Kiedy grep decyduje się pokolorować pasujące ciągi, a kiedy nie?
Za pomocą --color=auto
, grep podświetli pasujące ciągi, jeśli (i tylko wtedy), gdy dane wyjściowe są zapisywane bezpośrednio do terminala, a wspomniany terminal może wyświetlać kolorowe dane wyjściowe.
Zwykle --color=auto
jest to, czego chcesz. Jeśli np. Użyjesz grep, aby dopasować adres URL i potokujesz go do Wget, Wget zobaczy \e[1;31mhttp://...
zamiast rzeczywistego adresu URL (i będzie go dusić).
Następujące polecenia powinny dać kolorowe wydruki:
echo Super User | grep --color=auto Super
echo Super User | grep --color=always Super | cat
To polecenie nie powinno jednak:
echo Super User | grep --color=auto Super | cat
Wszelkie niespójności z tym zachowaniem należy uznać za błąd.
Dzięki --color=auto
najnowszej wersji Grep dla Windows (2.5.4) - jak również oryginalnej wersji 2.5.4, na której jest oparty - pokoloruj wyjście wtedy i tylko wtedy, gdy warunek
isatty(STDOUT_FILENO) && getenv("TERM") && strcmp(getenv("TERM"), "dumb")
ma wartość true, tzn. jeśli i tylko jeśli dane wyjściowe są zapisywane na terminalu, zmienna środowiskowaTERM
jest zdefiniowana, a terminal nie jest głupi .
Nie spowoduje to pożądanego zachowania w systemie Windows, ponieważ TERM
zwykle nie jest zdefiniowane. Łatwym rozwiązaniem tego problemu jest ustawienie TERM=windows
w panelu sterowania.
Najnowsza wersja grep (2.14) rozwiązuje ten problem, kolorując dane wyjściowe wtedy i tylko wtedy, gdy warunek
isatty(STDOUT_FILENO) && should_colorize()
ma wartość true, gdzie should_colorize()
jest różnie zdefiniowany dla POSIX i Win32:
W przypadku tych pierwszych warunek jest równoważny warunkowi 2.5.4; w drugim przypadku zmienna środowiskowa TERM
nie musi być ustawiona (po prostu nie może być dumb
).
sdgstd.h
,istty(stdout)
zwraca,0
jeśli dane wyjściowe zostaną przekierowane do pliku.grep
iless
projektu GnuWin (gnuwin32.sourceforge.net).cmd.exe
został ulepszony oansicon
narzędzie.less --color=auto
działa zgodnie z oczekiwaniami: używa koloru, gdy przekierowanie nie jest stosowane, i nie działa, gdy przekierowywane jest wyjście. Alegrep --color=auto
nie drukuje sekwencji ucieczki w obu przypadkach.