Shell-Script

測試命令是否接受特定選項

  • September 13, 2014

測試命令是否採用選項的首選方法是什麼?有什麼注意事項?

作為一個鼓舞人心的例子,在登錄我的 shell 別名 grep 以添加幾個 –exclude-dir 選項,但此選項並非在我訪問的所有機器上都可用。

您可以對虛擬數據進行測試,當且僅當該選項可用且按預期工作時才應該成功:

trap 'if [ -e "$tmp" ]; then rm -rf -- "$tmp"; fi' EXIT
tmp="$(mktemp -d)"
cd -- "$tmp"
mkdir exclude
mkdir include
echo foo > include/test.txt
echo foo > exclude/test.txt
[ "$(grep --exclude-dir exclude --recursive foo . | wc -l)" -eq 1 ]

幸運的是,有一種相對標準化的方式來報告程序的潛在選項。但是,它並不總是被使用,所以這不是一個萬無一失的答案;只是一個超級使用者證明的答案。

$prog --help | grep -e "\b$option\b"

(注意,\b 表示單詞邊界。這樣就不會在你的後面留下任何字元 $ option, so, $ 選項-f 將不匹配)

這將返回您的選項,如果它存在 - 但更重要的是,如果它存在則返回退出狀態 0,如果不存在則返回退出狀態 1。您可以使用以下方法進行測試:

$ # we pipe to /dev/null to hide the output, and show that it doesn't matter
$ grep --help | grep -e "\b--exclude-dir\b" > /dev/null
$ echo $?
0
$ grep --help | grep -e "\b--exclude-dirf\b" > /dev/null
$ echo $?
1

這將適用於許多程序,但並非所有程序都具有…有用的 –help 。你可能也有運氣

man $progr | grep -e "\b$option\b"

如果第一個失敗

引用自:https://unix.stackexchange.com/questions/154839