Suprimir “Nome ou serviço desconhecido” no ping

1

Eu tenho vários Raspberry Pi nomeados numericamente (pi0, pi1, etc). Eles têm endereços IP estáticos, mas eu queria uma ferramenta simples para verificá-los e ter certeza de que eles estavam on-line, mesmo se tivessem o IP errado (eu tive alguns problemas no passado. Nada recentemente, mas parecia uma boa ideia para torná-lo infalível independentemente). Em vez de usar IPs, esta ferramenta usa nomes de host MDNS que já estão em um formato legal. O script que eu escrevi é:

#!/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"

Funciona maravilhosamente quando os dispositivos estão online, retornando

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

No entanto, quando estão offline, a saída é semelhante a esta

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

Existe uma maneira de suprimir o "Nome ou serviço desconhecido" para a pesquisa do MDNS no ping? Eu já direciono a saída para / dev / null, então não vejo como ainda está dando saída.

Como alternativa, se você tiver uma maneira melhor / mais rápida / mais fácil / mais bonita de fazer essa verificação, adoraria ouvi-la.

    
por brndn2k 10.05.2018 / 02:32

1 resposta

1

Como foi brevemente apontado nos comentários , ping está exibindo essa mensagem para stderr, que você não havia redirecionado. Faça isso com:

...
ping -c1 pi$i.local > /dev/null 2>&1
...
    
por 10.05.2018 / 13:05