मार्टिनस के उत्तर का एक और सरलीकरण:
until ping -c1 www.google.com >/dev/null 2>&1; do :; done
ध्यान दें कि पिंग स्वयं को लूप टेस्ट के रूप में उपयोग किया जाता है; जैसे ही यह सफल होता है, लूप समाप्त हो जाता है। लूप बॉडी खाली होती है, जिसमें :
सिंटैक्स एरर को रोकने के लिए null कमांड का प्रयोग किया जाता है।
अपडेट: मैंने कंट्रोल-सी को पिंग लूप से साफ-सुथरा बनाने का एक तरीका सोचा। यह लूप को बैकग्राउंड में चलाएगा, इंटरप्ट (कंट्रोल-सी) सिग्नल को ट्रैप करेगा, और ऐसा होने पर बैकग्राउंड लूप को मार देगा:
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"
यह थोड़ा घुमावदार है, लेकिन अगर आप चाहते हैं कि लूप को रद्द किया जाए तो यह चाल करना चाहिए।