我有几个以数字命名的 Raspberry Pi(pi0、pi1 等)。他们有静态IP地址,但我想要一个简单的工具来检查他们并确保他们在线,即使他们得到了错误的IP(我过去遇到过一些麻烦。最近什么都没有,但这似乎是个好主意无论如何,使其万无一失)。该工具不使用 IP,而是使用格式良好的 MDNS 主机名。我写的脚本是:
#!/bin/bash
report+="Device Name Status Location\n"
report+="----------- ------ --------\n"
for i in {0..3}
do
report+="Pi$i "
ping -c1 pi$i.local > /dev/null
if [ $? == 0 ]
then
report+="Online "
report+=$(ping -c1 pi$i.local | grep -o "\w*192.168.1.\w*" | head -1)
else
report+="Unreachable"
fi
report+="\n"
done
echo -e "$report"
当设备在线、返回时效果非常好
Device Name Status Location
----------- ------ --------
Pi0 Online 192.168.1.3
Pi1 Online 192.168.1.4
Pi2 Online 192.168.1.5
Pi3 Online 192.168.1.6
但是,当它们离线时,输出看起来像这样
ping: pi0.local: Name or service not known
ping: pi1.local: Name or service not known
ping: pi2.local: Name or service not known
ping: pi3.local: Name or service not known
Device Name Status Location
----------- ------ --------
Pi0 Unreachable
Pi1 Unreachable
Pi2 Unreachable
Pi3 Unreachable
有没有办法抑制 ping 上的 MDNS 查找的“名称或服务未知”?我已经将输出定向到 /dev/null,所以我不知道它如何仍然提供输出。
或者,如果您有更好/更快/更简单/更漂亮的方法来进行此检查,我很想听听。
答案1
正如简短的那样评论中指出,ping
正在向 stderr 显示该消息,而您尚未重定向该消息。这样做:
...
ping -c1 pi$i.local > /dev/null 2>&1
...