是否始终忽略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. 第一个grep以彩色输出到终端(每个'o'为红色)
  2. 第二个grep通过更少的颜色输出(与1相同)
  3. 但是第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'以黄色突出显示。
汤姆·黑尔'18

Answers:


11

如果grep o产生颜色输出,则要么grepgrep --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(这是一个shell设置),而环境变量定义进入了~/.profile(这是一个会话设置)。请参阅是否所有外壳程序都读取“ .bashrc”等效文件?

如果只想运行一次非别名命令,请运行\grep而不是grep(引用名称的任何部分都会绕过别名查找)。


是的,您是对的,运行\ grep ...可以正确显示它。感谢您为我建议不要在.bashrc中使用“ = always”的建议。+1
理查德(Richard)

1
请注意,GREP_OPTIONS不赞成使用该alias变体。
所有工人都很重要2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.