Linux

如何在 linux 中 ping 直到主機已知?

  • October 22, 2021

如何 ping 某個地址,找到後停止 ping。

我想在 bash 腳本中使用它,所以當主機啟動時,腳本會繼續 ping,並且從主機可用的那一刻起,腳本會繼續……

Martynas 回答的進一步簡化:

until ping -c1 www.google.com >/dev/null 2>&1; do :; done

注意 ping 本身被用作循環測試;一旦成功,循環結束。循環體為空,空命令“ :”用於防止語法錯誤。

更新:我想到了一種讓 Control-C 乾淨地退出 ping 循環的方法。這將在後台執行循環,擷取中斷(Control-C)信號,並在發生時終止後台循環:

ping_cancelled=false    # Keep track of whether the loop was cancelled, or succeeded
until ping -c1 "$1" >/dev/null 2>&1; do :; done &    # The "&" backgrounds it
trap "kill $!; ping_cancelled=true" SIGINT
wait $!          # Wait for the loop to exit, one way or another
trap - SIGINT    # Remove the trap, now we're done with it
echo "Done pinging, cancelled=$ping_cancelled"

這有點迂迴,但如果你希望循環可以取消,它應該可以解決問題。

引用自:https://serverfault.com/questions/42021