私は次の行を持っています:
exec 3<>/dev/tcp/127.0.0.1/9091 > /dev/null 2>&1 || { PORT_IS_FREE="yes"; };
ポート9091が利用可能であることを確認しています。接続を確立できない場合は、次のエラーが表示されます。
my-script: connect: Connection refused
my-script: line 6: /dev/tcp/127.0.0.1/9091: Connection refused
もちろん、このエラーは悪いニュースではなく、ポートが無料であることを意味します。エラー追跡が記録されるのを防ぐ方法は?私はstdout / stderrを/ dev / nullに送ろうとしましたが、うまくいかないようです。
ボーナス:
私はset -e
スクリプトの一番上にあります。接続が拒否されると、すべてが停止します。上記のような特定の行でエラーが発生した場合、どのように停止を防ぐことができますか?
だから私は2つの目標を持っています。
これは予想されるエラーメッセージであるため、ライブラリユーザーが表示する必要はありません。
予想されるエラーは無視して、可能であればset -eを使用したいと思います。
ベストアンサー1
続行しますset -e
が、既知のエラーを許可するには、次の注文を使用してください。
/bin/false || :
これは||
演算子を使用して、エラーがset -e
アクティブ環境に致命的ではないと見なされるようにエラーを「消費」します。
すでに標準エラーを抑制するために使用しています2>/dev/null
。ここで引用した行でエラーが発生することは確実ですか?また、exec
以下を使用しないで、より読みやすい代替手段を使用することをお勧めします。
if ! nc -z localhost 9091 1> /dev/null 2>&1; then
port_free="yes"
fi
リターンコードはドアで確認するnc
ので、if
その後も安全ですset -e
。