为什么这个 ping 的输出在 subshel​​l 之外?

Phi*_*ide 6 bash ping subshell

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

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

echo "$connected" | tail -n1
Run Code Online (Sandbox Code Playgroud)

我期望它应该简单地返回“已连接”或“未连接”。当我实际使用脚本时,我总是在输出之前收到警告。

ping: Warning: source address might be selected on device other than enp0s25.
not connected
Run Code Online (Sandbox Code Playgroud)

这里的警告是什么,它不应该是子外壳的一部分吗?

Ste*_*itt 18

警告被发送到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
Run Code Online (Sandbox Code Playgroud)