このループをCtrl + C割り込み可能にする方法は?

このループをCtrl + C割り込み可能にする方法は?
# wait for host to become online
while true; do
    ping host -c 1 -w 3 > /dev/null && break;
    sleep 1
done

Ctrl+を押すとCpingが選択され、終了コード1(ホストの終了と同じ)で終了します。これを正しく行うにはどうすればよいですか?

解決策:sleep 1 || break^ Cをダブルクリックします。

答え1

trap "exit 1" INT

while true; do
    ping host -c 1 -w 3 > /dev/null && break;
    sleep 1
done

trap - INT # restore handler

答え2

ループをあまりにも奇妙に書かないでください。

until ping host -c 1 -w 3
do    sleep 1
done  >/dev/null

上記の作業を行うには、次のものが必要です。最大^Csleepループを終了するには、2回の連続キー入力が必要です。ただし、レイヤーを追加すると次のようになります。

sh -c '
    until ping host -c 1 -w 3
    do    sleep 1
    done' >/dev/null

…その二人は必要ありません。

関連情報