首页 > 解决方案 > 停止无限循环并在循环结束时中断

问题描述

我在 bash 中运行一个无限循环,它有一个计数元素。

while :
do
    #stuff including counting
    trap break int
done

这在很大程度上符合我的意愿。当我按 Ctrl+C 时,循环停止,但脚本继续。但是,循环在循环中间停止,这意味着最终计数不准确。

有没有办法让这个循环在最后中断?

标签: linuxbash

解决方案


break您可以设置一个标志并在设置标志时在指定位置中断循环,而不是执行。请注意,在循环中,循环头也可以视为循环的最后。

state=run
trap 'state=end' int
while [ "$state" = run ]
do
    # stuff
done

如果你想在中间使用某个地方打破

state=run
trap 'state=end' int
while :
do
    # stuff
    [ "$state" = end ] && break
    # more stuff
done

# stuff您可以通过替换为安静地测试行为for i in {1..20}; do printf .; sleep 0.1; done; echo

脚本在行动

正如我们在上面的剪辑中看到的,外部循环完成了它的当前迭代(# stuff)直到最后。


推荐阅读