Odpowiedzi:
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
i less
projektu GnuWin (gnuwin32.sourceforge.net). cmd.exe
został ulepszony o ansicon
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. Ale grep --color=auto
nie drukuje sekwencji ucieczki w obu przypadkach.