Bashスクリプトから「接続拒否」エラーを削除する

Bashスクリプトから「接続拒否」エラーを削除する

私は次の行を持っています:

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つの目標を持っています。

  1. これは予想されるエラーメッセージであるため、ライブラリユーザーが表示する必要はありません。

  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

おすすめ記事