抑制 ping 上的“名称或服务未知”

抑制 ping 上的“名称或服务未知”

我有几个以数字命名的 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
...

相关内容