为什么此 ping 的输出位于子 shell 之外?

为什么此 ping 的输出位于子 shell 之外?

我有一个简单的脚本来检查接口是否已连接:

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

这里的警告是怎么回事,它不应该是子shell的一部分吗?

答案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

相关内容