测试是否支持命令选项

时间:2013-01-11 15:34:26

标签: bash shell

在我的.bashrc中,如果支持grep --color选项,我想将grep别名为--color 。但是msxgit等旧系统不支持--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

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

2 个答案:

答案 0 :(得分:8)

使用你知道会成功的grep命令并添加颜色选项E.g。

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

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

所以你的bashrc看起来像是:

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

&>将stdout stderr发送到/ dev / null,因此如果命令失败,它将被静音。但它仍会返回错误代码,这会阻止设置别名。

答案 1 :(得分:0)

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