如何使这个循环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+时C,ping 会收到它并以退出代码 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

执行上述操作将需要在最多^C连续两次击键即可退出循环 - 这是因为sleep.但如果你再分层一次:

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

...你甚至不需要这两个。

相关内容