Что означает опция --color = auto для GNU grep?


14

AFAICT, ни man-страница для GNU grep, ни info grepдостойная информация о том, что --color=autoзначит.

Я должен быть одним из немногих людей на планете, для которых смысл этого варианта не сразу очевиден.

Я предполагаю, что --color=auto« где -то между» --color=neverи --color=always, но это все еще оставляет слишком много неопределенным.

Ответы:


14

Правила те же, что и для ls, что лучше документирует это man ls. Цитирование:

Использование цвета для различения типов файлов отключено как по умолчанию, так и
с параметром --color = never. С параметром --color = auto ls выдает цветовые коды только тогда, когда
стандартный вывод подключен к терминалу.
Переменная окружения LS_COLORS может изменять настройки. Используйте команду dircolors, чтобы установить ее.

Таким образом, команда добавит цветовое форматирование только тогда, когда выходные данные отправляются в терминал, а не, скажем, когда оно идет в канал, где программа, потребляющая канал, может плохо обрабатывать форматирование цвета.


3
Да, основные моменты, с которыми я сталкивался, были меньше. Если вы используете, less -Rвы можете получить подсветку совпадений, но вам нужно указать --color=alwaysgrep, чтобы он работал.
Holloway

10

Так grepкак это программа GNU, другой вариант может быть смотреть на исходный код.


Внутренне grep проверяет static int color_optionлибо либо 0, 1либо 2.

  • 0 никогда не используйте цветной вывод
  • 1 всегда используйте цвета
  • 2 использовать цвета только при печати на терминал

Теперь, когда вы --color=autoпередаете команду grep в качестве аргумента для вашего CLI, она внутренне устанавливает переменную color_optionв 2.

Если color_optionравно, 2 grepто в дальнейшем проверяется, STDOUTсвязан ли он с терминалом или пользователь отключил раскрашенный вывод через shell environment variables. Если первый вариант верен и цветная grepпечать разрешена, то продолжается оценка того, какие цвета следует использовать, и, в конце концов, в конце выдает CLIцвет.


источник: (grep 2.21)

grep.c line 306, 2374, 2440
colorize-posix.c line 36
man isatty 
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.