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

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

我正在摆弄设置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 通过 less 颜色输出(与 1 相同)
  3. 但是第三个 grep 输出较少,但是是黑白的——但这应该是彩色的。

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

(Ubuntu 12.04.2、GNU grep 2.10)

答案1

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

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

如果您想使用环境变量,请从您的~/.bashrc或一次会话运行中删除别名定义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”等效文件?

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

相关内容