停止无限循环并在循环结束时中断

时间:2019-02-06 14:57:23

标签: linux bash

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

while :
do
    #stuff including counting
    trap break int
done

这在大多数情况下都是我想要的。当我按Ctrl + C时,循环停止,但脚本继续。但是,循环在循环中间停止,这意味着最终计数不正确。

有没有一种方法可以使循环最终结束?

1 个答案:

答案 0 :(得分:4)

您可以设置标志并在设置标志时在指定位置中断循环,而无需执行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来安静地测试行为:

Script in action

正如我们在上面的剪辑中看到的那样,外循环将完成其当前迭​​代(# stuff)直到最后。