Что делает параметр grep --color=auto?

Что делает параметр grep --color=auto?

Какой эффект имеет autoопция для --colorswitch в 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в панели управления.

Последняя версиягрэп(2.14) устраняет эту проблему, раскрашивая выходные данные тогда и только тогда, когда выполняется условие

isatty(STDOUT_FILENO) && should_colorize()

верно, где should_colorize()определяется по-разному для POSIX и Win32:

Для первого случая условие эквивалентно условию 2.5.4; для второго случая переменная окружения TERMне обязательно должна быть установлена ​​(она просто не может быть установлена dumb).

Связанный контент