2013-01-11 95 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 
` 
相關問題