Что делает переключатель grep --color=auto?

Какой эффект делает auto как вариант для --color переключатель есть в grep? Когда grep решает окрасить соответствующие строки, а когда нет?

1 ответ

Решение

Ожидаемое поведение

С --color=autogrep выделит совпадающие строки, если (и только если) вывод записывается непосредственно в терминал, и указанный терминал способен отображать цветной вывод.

Обычно, --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).

Другие вопросы по тегам