特定のホストのコマンドが特定のオプションを安定した方法でサポートしていることを確認したいと思います。
私のユースケースはローカルをチェックすることです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
返された値は、無効なポートエラーケースとサポートされていないパラメータによる誤った呼び出しを区別できません。
好む他のオプションはありますか?
ベストアンサー1
コマンドライン処理では、コマンドの動作は非常に多様であるため、汎用ソリューションを作成することは不可能です。それぞれのケースで実際にサポートされているコマンドラインスイッチを確認する方法を見つける必要があります。致命的な動作(例:-wオプションを使用して呼び出すときに誤った操作を実行するいくつかの一般的なncバージョン)を避けるために、唯一のオプションは既知のバージョンとサポートされているコマンドラインスイッチのリストを保持し、次のバージョンの使用を拒否するです。これはリストにないコマンドです:-)