1 2 3 4 5 6 7 8 9 10 | #!/bin/bash # wait until a host is pingable, then exit 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" |