web-dev-qa-db-ja.com

このpingの出力がサブシェルの外側にあるのはなぜですか?

インターフェイスが接続されているかどうかを確認する簡単なスクリプトがあります。

connected=$(ping -I $1 -qc 1 8.8.8.8 \
  && echo "connected" \
  || echo "not connected")

echo "$connected" | tail -n1

単に「接続済み」または「未接続」を返す必要があると思います。実際にスクリプトを使用すると、出力の前に常に警告が返されます。

ping: Warning: source address might be selected on device other than enp0s25.
not connected

ここでの警告とは何ですか、それはサブシェルの一部であるべきではありませんか?

6

警告はpingの標準エラーに送信されますが、キャプチャされません。無視したい場合は、明示的に/dev/nullにリダイレクトしてください。

connected=$(ping -I $1 -qc 1 8.8.8.8 2>/dev/null \
  && echo "connected" \
  || echo "not connected")

echo "$connected" | tail -n1
18
Stephen Kitt