2

シェル スクリプトで、多数の URL に対して nslookup を実行しています

一部の URL リターンがエラーを解決できない場合があります。これらのエラーを変数に取り込む必要があります。

これは、返された IP アドレスを取得する nslookup のコードです。

output=$(nslookup "$URL" | grep Add | grep -v '#' | cut -f 3 -d ' ' | awk 'NR>1' )

同じ変数出力で、エラーをキャプチャしたい

nslookup: can't resolve

Stdout ファイルにキャプチャしています。

2>&1 などの異なるバージョンのリダイレクトを試しましたが、変数にエラーが割り当てられません。エラーを別のファイルにリダイレクトするのではなく、上記の出力変数に記録したい。

4

2 に答える 2

1

awkを使用している限り、物事を大幅に簡素化できます

nslookup "$URL" 2>&1 | 
awk -e '/Add/ && !/#/ && NR > 1 {print $2}' 
    -e '/resolve|NXDOMAIN/ { print "error" }'

わかりやすくするために、1 つの行を 3 つに分けています。あなたが抱えていると言う問題を再現することはできませんし、2&>1失敗するはずもないと思います。

于 2013-05-07T15:18:04.593 に答える
1

使用するとstderrのリダイレクトが機能します

output=$(nslookup "$URL" 2>&1 | grep Add | grep -v '#' | cut -f 3 -d ' ' | awk 'NR>1')

ですぐにフィルタリングするので無駄ですgrep Add。自分の論理と本当に欲しいものを再考する必要があります。多分より良いアプローチは

output=$(nslookup "$URL" 2>&1)
case $output in
   (nslookup:*) ;;
   (*) output=$(echo "$output" | grep Add | ...);;
esac
于 2013-05-07T15:04:14.567 に答える