Shell-Script
測試命令是否接受特定選項
測試命令是否採用選項的首選方法是什麼?有什麼注意事項?
作為一個鼓舞人心的例子,在登錄我的 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"
如果第一個失敗