GREP_OPTIONS= --color=总是被忽略吗?

Ric*_*ard 8 less grep ubuntu

我正在玩设置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 
Run Code Online (Sandbox Code Playgroud)
  1. 第一个 grep 输出到终端的颜色(每个 'o' 是红色的)
  2. 第二个 grep 通过较少的颜色输出(与 1 相同)
  3. 但是第三个 grep 输出更少,但是是黑白的——但这应该是彩色的。

所以看来 grep 忽略了GREP_OPTIONS. 这是一个错误还是我做错了什么?

(Ubuntu 12.04.2,GNU grep 2.10)

Gil*_*il' 11

如果grep o生成颜色输出,则要么grepgrep --color=autoor grep --color=always(或可能有更多选项)的别名,要么GREP_OPTIONS设置为包含--color=auto或的值--color=always。既然$GREP_OPTIONS是空的,就一定是别名。

由于grep o | less -R不显示颜色,所以别名必须是 to grep --color=auto(一个明智的选择)。使用别名,grep命令总是接收--color命令行上的选项,这优先于环境变量。

如果您想使用环境变量,请从您的~/.bashrc或一个会话 run 中删除别名定义unalias grep。您可以替换alias grep='grep --color=auto'export GREP_OPTIONS='--color=auto':它们具有基本相同的含义,除了:

  • 设置GREP_OPTIONS为不同的值只会覆盖后者;
  • 别名仅在您grep从交互式 shell运行时生效,而设置GREP_OPTIONS也适用于grep从脚本和其他应用程序运行时。

永远不要放入--color=always或大多数其他选项GREP_OPTIONS:它会破坏许多解析grep. --color=auto是关于放入GREP_OPTIONS. 对于其他任何事情,请使用别名。出于这个原因,GNU grep 的未来版本将不再支持该选项。

请注意,别名定义进入~/.bashrc(它是一个 shell 设置),而环境变量定义进入~/.profile(它是一个会话设置)。请参阅是否有所有 shell 读取的“.bashrc”等效文件?

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