linux - 停止无限循环并在循环结束时中断
问题描述
我在 bash 中运行一个无限循环,它有一个计数元素。
while :
do
#stuff including counting
trap break int
done
这在很大程度上符合我的意愿。当我按 Ctrl+C 时,循环停止,但脚本继续。但是,循环在循环中间停止,这意味着最终计数不准确。
有没有办法让这个循环在最后中断?
解决方案
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
)直到最后。
推荐阅读
- java - Java program to short and count
- python - 接受负数输入并进行数据验证的温度转换器
- php - Captcha Helper Codeigniter 错误 - imagettftext(): 找不到/打开字体
- c# - 从 .net Web 应用程序运行 python 脚本文件时出错
- python - UnicodeEncodeError:“charmap”编解码器无法在位置 0 编码字符“\ufeff”:字符映射到
- influxdb - 如何遍历kapacitor tick脚本中的字符串列表
- firebase - 如何修复“Firebase 错误:数据库名称不正确”
- java - 可以分配一个静态变量,但不能在静态初始化程序中打印出来
- python - Python 正则表达式函数
- r - 如何将Shell变量引入R脚本?