Как пинговать в Linux, пока хост не станет известен с тайм-аутом X секунд? - PullRequest
0 голосов
/ 10 октября 2018

Я пытаюсь дождаться загрузки устройства в моем коде, и я не хочу использовать sleep, чтобы ждать его.Моя проблема в том, что иногда устройство не загружается, и я застреваю в цикле при использовании:

until ping -c1 www.google.com &>/dev/null; do :; done
while true; do ping -c1 www.google.com > /dev/null && break; done

Как я могу попытаться пропинговать устройство в течение X секунд и распечатать "DEAD" или "ALIVE", используяодин лайнер?

Ответы [ 2 ]

0 голосов
/ 10 октября 2018

Вы можете использовать эту утилиту Linux: https://linux.die.net/man/1/timeout
И ваш oneliner будет выглядеть примерно так:

timeout 50 bash -c "while true; do if ping -c1 -i1 8.8.8.8 &>/dev/null; then echo "up"; break; fi; done"
0 голосов
/ 10 октября 2018

Вам нужна опция -W, которая заставляет ping ожидать время ожидания X секунд.

Для Linux (iputils):

$ ping -c1 -W10 <url>

Для MacOS X:

$ ping -c1 -t10 <url>

Не однострочный, но ожидание будет 10 секунд до истечения времени ожидания:

if ping -c 1 -W 10 www.google.com 1>/dev/null; then 
    echo Success; 
else 
    echo Failed; 
fi
...