ping 192.168.0.1 | awk '{print $1}'
connect: Network is unreachable
いくつかのタスクを実行するスクリプトを作成しています。したがって、ホスト名が間違っているか、pingコマンドでエラーが発生した場合は、適切なエラーメッセージを表示したいと思います。
上記のコマンドを使用して生成されたエラーを修正しようとしました。私がやりたいことは単に「ping」の代わりにエラーを印刷することですが、そのようなことは起こりません。誰でもこれに対する解決策を教えてもらえますか?
ベストアンサー1
ping
特定のホスト名にアクセスできることを確認するためにこれを使用する場合は、次のことができます。
if ping -c 1 "$otherhost" >/dev/null 2>&1; then
printf 'The host "%s" is reachable\n' "$otherhost"
else
printf 'The host "%s" is not reachable\n' "$otherhost"
fi
これはECHO_REQUEST
単一のパケットを指定されたホストに送信し、終了ステータスを"$otherhost"
使用してping
ユーティリティがその操作を実行したかどうかを決定します。すべての通常の出力はping
破棄されます。
他のホストを照会できないことは、ping
ホストが確実にダウンしているか、ルーティングできないという意味ではありません。パケットを無視することもできますECHO_REQUEST
。
失敗したときに生成された実際のエラーを出力したい場合は、ping
ユーティリティを2回呼び出さないようにすることができます。ping
できます)。他の方法で):
pingerr=$(mktemp)
if ping -c 1 "$otherhost" >/dev/null 2>"$pingerr"; then
printf 'The host "%s" is reachable\n' "$otherhost"
else
printf 'The host "%s" is not reachable\n' "$otherhost"
if [ -s "$pingerr" ]; then
echo 'ping error:'
cat "$pingerr"
fi
fi
rm -f "$pingerr"
ping
これにより、後で失敗した場合に出力される一時ファイルにすべての診断メッセージが保存されますping
(その中に内容がある場合は-s
テストによってテストされます)。ファイルは常に生成されるため(空の場合でも)if
- ステートメントの後に削除します。
この方法では、必要な方法でエラー出力ファイルを解析することもできます。たとえば、
pingerr=$(mktemp)
if ping -c 1 "$otherhost" >/dev/null 2>"$pingerr"; then
printf 'The host "%s" is reachable\n' "$otherhost"
else
printf 'The host "%s" is not reachable\n' "$otherhost"
if [ -s "$pingerr" ]; then
printf 'ping says'
sed 's/^[^:]*//' <"$pingerr"
fi
fi
rm -f "$pingerr"
ここでは、元のメッセージを出力するping
のではなく、印刷する前に最初のメッセージの前のビットを削除します。: