Що означає опція --color = auto для GNU grep?


14

AFAICT, ні довідкова сторінка для GNU grep, ні , не розроблені, щоб пояснити, info grepщо --color=autoозначає.

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

Я припускаю, що --color=auto" дещо між ними" --color=neverі --color=always, але це все ще залишає занадто багато не визначених.

Відповіді:


14

Правила такі ж, як і для ls, що дозволяє краще документувати це man ls. Цитування:

Використання кольору для розрізнення типів файлів вимкнено як за замовчуванням, так і
з --color = ніколи. З --color = auto, ls видає кольорові коди лише тоді, коли
стандартний вихід підключений до терміналу.
Змінна середовища LS_COLORS може змінювати налаштування. Використовуйте команду dircolors, щоб встановити її.

Таким чином, команда зробить додавання форматування кольорів лише тоді, коли вихід збирається в термінал, а не, скажімо, тоді, коли він збирається в трубу, де програма, що споживає трубу, не може добре впоратися з кольоровим форматуванням.


3
Так, основні випадки, коли я стикався з цим, були трубопроводи менше. Якщо ви користуєтесь, less -Rви можете отримати підсвічування матчу, але вам потрібно вказати, --color=alwaysщоб він не працював.
Холлоуей

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колір.


джерело: (греп 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.