我有一个 bash 脚本
有一个 for 循环,它迭代很多次并在迭代之间休眠,可能会持续很长时间。那么它
将结果写入文件,然后终止。
有时我会在许多循环迭代完成之前得到我需要的结果。
在这些情况下,我需要脚本break
退出 for 循环,而它要么是
做事,或
睡眠
这样它将继续执行脚本的其余部分,在 for 循环之后,它正在编写迄今为止收集的数据的报告文件。
我希望使用组合键,例如 CTRL+Q,break
退出 for 循环。
脚本如下所示:
#!/bin/bash
for (( c=0; c<=$1; c++ ))
do
# SOME STUFF HERE
# data gathering into arrays and other commands here etc
# sleep potentially for a long time
sleep $2
done
#WRITE REPORT OUT TO SCREEN AND FILE HERE
我有一段时间没有接触过这类任务,但我记得曾经有这样的事情:
这个想法是使用Ctrl-C来打破循环。这个信号(SIGINT)被陷阱捕获,它打破循环并让脚本的其余部分跟随。
例子:
如果您对此有任何问题,请告诉我。
最简单的方法是使用Ctrl+C,因为默认情况下它会发出
INT
信号,这会导致大多数应用程序停止,您可以在 shell 中捕获它。要一次中断整个循环,您可以在子shell 中运行它,并
exit
在中断时运行它。在这里,陷阱仅设置在子shell中,并且只有它退出。在某些情况下,最好有一个不中断“这里的一些东西”的解决方案,并且只在 shellscript 等待时中断。
然后,您可以使用带有一些选项的 shell 内置命令
read
,而不是sleep
.试试这个shellscript,
您可以找到有关
read
使用命令的详细信息help read
,