이 루프를 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루프를 종료하려면 두 번의 연속 키 입력이 필요합니다 . 그러나 다시 레이어를 추가하면 다음과 같습니다 .

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

...그 둘은 필요하지도 않아요.

관련 정보