如何优雅地停止bash脚本中的无限循环?

Sam*_*irl 8 bash shell infinite-loop

我需要在每X秒运行的应用程序,因此,尽可能的cron不秒,这样的工作,我写了一个bash脚本具有X秒睡在它无限循环.

当我必须手动停止运行脚本时,我想以正确的方式执行它 - 让应用程序完成运行,并且不要再次进入循环.

你有什么想法,如何实现这一目标?我想过传递参数,但我找不到如何将参数传递给运行脚本.

cda*_*rke 24

你可以捕获一个信号,比如SIGUSR1:

echo "My pid is: $$"
finish=0
trap 'finish=1' SIGUSR1

while (( finish != 1 ))
do
    stuff
    sleep 42
done
Run Code Online (Sandbox Code Playgroud)

然后,当您想在下一次迭代时退出循环:

kill -SIGUSR1 pid
Run Code Online (Sandbox Code Playgroud)

pid脚本的进程ID 在哪里.如果在睡眠期间信号升高,它将被唤醒(睡眠休眠直到出现任何信号).