我正在摆弄设置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
- 第一个 grep 以彩色形式输出到终端(每个“o”都是红色)
- 第二个 grep 通过 less 颜色输出(与 1 相同)
- 但是第三个 grep 输出较少,但是是黑白的——但这应该是彩色的。
所以看起来 grep 忽略了GREP_OPTIONS
。这是一个错误还是我做错了什么?
(Ubuntu 12.04.2、GNU grep 2.10)
答案1
如果grep o
产生颜色输出,则要么是orgrep
的别名(或可能有更多选项),要么设置为包含or 的值。既然是空的,那么它一定是别名。grep --color=auto
grep --color=always
GREP_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
(引用名称的任何部分会绕过别名查找)。