Какой эффект имеет auto
опция в виде --color
переключателя в grep? Когда grep решает окрасить соответствующие строки, а когда нет?
источник
Какой эффект имеет auto
опция в виде --color
переключателя в grep? Когда grep решает окрасить соответствующие строки, а когда нет?
С помощью --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
не печатает escape-последовательности в обоих случаях.