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

この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

ここで警告はどうなりますか?サブシェルの一部ではないはずですか?

ベストアンサー1

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

おすすめ記事