2013-01-11 96 views
4

在我的.bashrc中,如果支持--color选项,我想将grep别名为grep --color。但--color不支持旧的系统,如msysgit:测试是否支持命令选项

$ 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 

有测试如果命令支持的选项更可靠的方法是什么?

+0

'grep(GNU grep)2.4.2版权所有2000自由软件基金会公司'复古! –

+1

MSys的开发人员热衷于更新他们发布的软件包,但是它比您预期的要难得多https://github.com/msysgit/msysgit/issues/31 –

回答

8

拿一个你知道会成功的grep命令并添加颜色选项E.g.

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

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

所以你的.bashrc会像:

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

&>发送标准输出标准错误到/ dev/null的,因此,如果命令失败,这是沉默。但它仍然返回一个错误代码,防止别名被设置。

+1

没有必要将命令封装在'[[。 ..]]构造; 'if grep --color“a”<<<“a”;然后 ...; fi'也可以工作 – chepner

+0

感谢您的支持 – cmh

+0

啊,是的,我昨天刚刚读到了Herestrings。 –

0
` 
echo s > dummy ; 
grep --color s dummy ; 
if [[ $? == 2 ]]; then 
    echo not supported 
fi 
` 
相关问题