Відповіді:
З --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
в обох випадках не друкується послідовність втечі