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