如何在 linux 中 ping 直到知道主机超时 X 秒?

How to ping in linux until host is known with X seconds timeout?

我正在尝试等待设备在我的代码中启动,我不想使用睡眠来等待他。 我的问题是有时设备无法启动并且我在使用时陷入循环:

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

我如何尝试 ping 设备 X 秒并使用一个衬里打印 "DEAD" 或 "ALIVE"?

您需要 -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

您可以使用此 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"