5

在我的 grep 中,如果支持该选项.bashrc,我想将其别名为。但在 msysgit 等旧系统上不受支持:grep --color --color--color

$ grep --color
grep: unrecognized option '--color'
$ grep --version
grep (GNU grep) 2.4.2

在 .bashrc 中,如何确定是否支持某个选项?我可以测试硬编码的版本号,但是对于 >2.5 的版本会中断:

if [[ `grep --version` == *2.5* ]] ; then
    alias grep='grep --color=auto'
fi

是否有更可靠的方法来测试命令是否支持选项?

4

2 回答 2

9

使用您知道会成功的 grep 命令并添加颜色选项,例如

grep --color "a" <<< "a"

如果选项存在,则返回码将为 0,否则为正。

所以你的 bashrc 看起来像:

if grep --color "a" <<<"a" &>/dev/null; then
    alias grep='grep --color=auto'
fi

&>将 stdoutstderr 发送到 /dev/null,因此如果命令失败,它将被静音。但它仍然返回一个错误代码,从而阻止设置别名。

于 2013-01-11T15:37:37.253 回答
0
`
echo s > dummy ;
grep --color s dummy ;
if [[ $? == 2 ]]; then
    echo not supported
fi
`
于 2013-01-11T15:42:25.243 回答