GREP_OPTIONS = --color = всегда игнорируется?

8

Я играл с настройками GREP_OPTIONSи не мог заставить его работать. Просто любопытно, почему.

Вывод простых тестовых команд:

richard@ubuntu:~$ echo $GREP_OPTIONS

richard@ubuntu:~$ 

richard@ubuntu:~$ ls | grep o 
Desktop
downloads
Dropbox
ebooks
workspace

richard@ubuntu:~$ ls | grep o --color=always | less -R 

richard@ubuntu:~$ export GREP_OPTIONS="--color=always" 
richard@ubuntu:~$ ls | grep o  | less -R 
  1. 1-й grep выводит на терминал в цвете (каждый 'o' красный)
  2. 2-й grep выводит меньше цвета (так же, как 1)
  3. Но третий grep выводит меньше, но в черно-белом режиме - но это должно быть в цвете.

Похоже, что grep игнорирует GREP_OPTIONS. Это ошибка или я что-то не так делаю?

(Ubuntu 12.04.2, GNU grep 2.10)

Ричард
источник
grep v3.1громко жалуется GREP_OPTIONSна каждый призыв:grep: warning: GREP_OPTIONS is deprecated; please use an alias or script
Том Хейл
Я использую: alias grep='GREP_COLOR="1;33;40" LANG=C grep --color=auto'для выделения желтым цветом.
Том Хейл,

Ответы:

11

Если grep oпроизводит вывод цвета, то либо grepявляется псевдонимом для grep --color=autoили grep --color=always(или, возможно, больше параметров), либо GREP_OPTIONSустанавливается значение, которое содержит --color=autoили --color=always. Так $GREP_OPTIONSкак пусто, это должен быть псевдоним.

Поскольку grep o | less -Rне показывает цвета, псевдоним должен быть grep --color=auto(разумный выбор). При использовании псевдонима grepкоманда всегда получает --colorпараметр в командной строке, и он имеет приоритет над переменной среды.

Если вы хотите использовать переменную среды, удалите определение псевдонима из своего ~/.bashrcили для одного сеанса unalias grep. Вы можете заменить alias grep='grep --color=auto'на export GREP_OPTIONS='--color=auto': они имеют практически одинаковое значение, за исключением того, что:

  • установка GREP_OPTIONSдругого значения только переопределяет последнее;
  • псевдоним grepвключается только при запуске из интерактивной оболочки, в то время как настройка GREP_OPTIONSтакже применяется при grepзапуске из сценариев и других приложений.

Никогда не вставляйте --color=alwaysили большинство других параметров GREP_OPTIONS: это сломало бы много программ, которые анализируют вывод grep. --color=autoо единственном безопасном варианте , чтобы положить в GREP_OPTIONS. Для всего остального используйте псевдоним. По этой причине в будущих версиях GNU grep будет прекращена поддержка этой опции.

Обратите внимание, что определение псевдонима входит в ~/.bashrc(это настройка оболочки), тогда как определение переменной среды входит в ~/.profile(это настройка сеанса). См. Есть ли ".bashrc" эквивалентный файл, прочитанный всеми оболочками?

Если вы хотите выполнить команду unaliased только один раз, запустите \grepвместо grep(цитирование любой части имени обходит поиск псевдонимов).

Жиль "ТАК - перестань быть злым"
источник
Да, вы правы, запуск \ grep ... показывает это правильно. Спасибо за бонусный совет за то, что я рекомендовал не использовать "= always" в .bashrc. +1
Ричард
1
Обратите внимание, что GREP_OPTIONSне рекомендуется в пользу aliasварианта.
Все работники необходимы