2012-03-01 7 views
3

私はトラップの使い方を中程度に理解していますが、私の人生の間は/ dev/tcpから返されたエラーを捕まえる方法を理解できません。/dev/tcpからBashのエラーを捕まえるには?

"cat:</dev/tcp/$ URL/$ PORT"を実行している場合、「接続:接続が拒否されました」という結果のサーバーの場合、そのエラーをどのように捕捉するかわかりません。

このケースで誰かがどのようにトラップを使用するかについての洞察があれば、それは非常に役に立ちます。

if [ $? != 0 ]; then 
    echo "error" 
fi 

、それはエラーが発生した場合、私がアクションをコミットできるようにすることができますが、これは私がこの特定の問題に対処する方法を知っている唯一の方法である:私はそれを処理する現在の方法はこれです。それを行う正しい方法ではありませんが、私は働くことができる唯一のものです。

誰かがBashでこの問題を解決する方法を知っていれば、それは素晴らしいことです。そして、いいえ、代わりにnetcatを使うことはできません。

答えて

0

トラップは信号を捕まえることができますが、一般的な例外管理機能ではありません。

1つのこと "cat"コマンドの出力をキャッチし、エラーの情報が含まれているかどうかを確認してください(特にcatの戻り値がゼロでない場合)。さもなければ、シェルの内部ではあまり実際には可能ではありません。

3

エラーはBashのものであり、catのものではありません。したがって、リダイレクト演算子は役に立たない。

私はまだ接続エラーメッセージを消去する手段を探しています。

それでもエラー状態が評価できる:上記のテストの

exec 3<>/dev/tcp/${2}/${3} || { 
    echo "PROBLEM" 
    exit 1 
} 

アン修正版は次のようになります。

#!/bin/bash 

# args: #1: host, #2: port 

(exec 3<>/dev/tcp/${1}/${2}) &>/dev/null 
if [ $? -ne 0 ] ; then 
    echo "PROBLEM" 
    exit 1 
fi 

明らかに、このバージョンでは、発信者のためのFD 3を開きませんが、意図されますエラーメッセージを破棄します。