Io-Redirection

在 ping 上禁止“名稱或服務未知”

  • May 10, 2018

我有幾個以數字命名的 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,所以我看不到它仍然如何提供輸出。

或者,如果你有更好/更快/更容易/更漂亮的方式來做這個檢查,我很想听聽。

正如評論中簡要指出的那樣ping正在向 stderr 顯示您沒有重定向的消息。這樣做:

...
ping -c1 pi$i.local > /dev/null 2>&1
...

引用自:https://unix.stackexchange.com/questions/442894