Відповіді:
З --color=auto, grep виділить відповідні рядки, якщо (і тільки якщо) вихід буде записаний безпосередньо в термінал, і зазначений термінал здатний відображати кольоровий вихід.
Зазвичай, --color=autoце те, що ти хочеш. Якщо, наприклад, ви використовуєте grep, щоб відповідати URL-адресі і передавати його Wget, Wget побачить \e[1;31mhttp://...замість фактичної URL-адреси (і заглушиться).
Наступні команди повинні спричинити кольоровий вихід:
echo Super User | grep --color=auto Super
echo Super User | grep --color=always Super | cat
Однак ця команда не повинна:
echo Super User | grep --color=auto Super | cat
Будь-яка невідповідність цій поведінці слід вважати помилкою.
З --color=auto, остання версія Grep для Windows (2.5.4) - як і оригінальна 2.5.4, на основі якої - кольоровий вихід, якщо і лише за умови
isatty(STDOUT_FILENO) && getenv("TERM") && strcmp(getenv("TERM"), "dumb")
є істинним, тобто, якщо і тільки тоді, коли вихід записується в термінал, визначається змінна середовищаTERM і термінал не є німим .
Це не призведе до бажаної поведінки в Windows, оскільки TERMзазвичай не визначено. Просте рішення цієї проблеми - встановлення на TERM=windowsпанелі управління.
Остання версія grep (2.14) виправляє цю проблему, забарвлюючи вихід, якщо і лише за умови
isatty(STDOUT_FILENO) && should_colorize()
вірно, де should_colorize()для POSIX та Win32 визначено по-різному:
Для перших умова еквівалентна умові 2,5,4; для останнього змінну навколишнього середовища TERMне потрібно встановлювати (просто не може бути dumb).
sdgstd.h, istty(stdout)повертається, 0якщо вихід буде переспрямований у файл.
grepі lessвід проекту GnuWin (gnuwin32.sourceforge.net). cmd.exeвдосконалюється ansiconкорисністю. less --color=autoпрацює як очікувалося: використовує колір, коли перенаправлення не застосовується, а не, коли вихід переспрямований. Але grep --color=autoв обох випадках не друкується послідовність втечі