Command

驗證命令是否支持選項的最佳方法

  • April 16, 2018

我想以穩健的方式驗證給定主機中的命令是否支持給定選項。

我的案例是驗證本地**nc**命令是否支持-w超時選項。

我的第一個想法是使用該選項執行命令,然後檢查返回值:

<command> <option> ...
[ $? -ne 0 ] && echo "NOT SUPPORTED"

此方法與其他可能產生非零值的錯誤原因相衝突。

例如,我有一個監聽 Unix 套接字 192.168.1.122:3888,而在我的本地主機上,我想測試超時**nc**選項(我們認為不支持):

> nc 192.168.1.122 3999 < /dev/null 2>/dev/null
> echo $?
1
> nc 192.168.1.122 3888 -w 1 < /dev/null 2>/dev/null
> echo $?
1

你看,從返回值來看,我不會區分錯誤的埠錯誤情況和由於不受支持的參數而導致的錯誤呼叫。


還有其他的,也許是首選的選擇嗎?

由於有關命令行處理的命令行為差異很大,因此不可能創建通用解決方案。對於每種情況,您都需要找到方法來確定實際支持哪些命令行開關。如果你想防止災難性的行為(例如,一些不常見的 nc 版本在使用 -w 選項呼叫時會做壞事),你唯一的選擇是維護一個已知版本的列表及其支持的命令行開關,並拒絕使用不在此列表中的命令版本:-)

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