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=autojest 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=autonajnowszej 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ż TERMzwykle nie jest zdefiniowane. Łatwym rozwiązaniem tego problemu jest ustawienie TERM=windowsw 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 TERMnie musi być ustawiona (po prostu nie może być dumb).
sdgstd.h, istty(stdout)zwraca, 0jeśli dane wyjściowe zostaną przekierowane do pliku.
grepi lessprojektu GnuWin (gnuwin32.sourceforge.net). cmd.exezostał ulepszony o ansiconnarzędzie. less --color=autodziała zgodnie z oczekiwaniami: używa koloru, gdy przekierowanie nie jest stosowane, i nie działa, gdy przekierowywane jest wyjście. Ale grep --color=autonie drukuje sekwencji ucieczki w obu przypadkach.