我是shell脚本的新手,需要帮助。
我想用无限循环运行一些命令,我希望循环在按下ctrl-c时终止,但在终止之前我希望当前迭代完成(意味着循环中的所有语句都应该执行)。
infinite-loop (
command 1;
command 2;
command 3;
loop-ends
所以在执行的任何一点ctrl-c上,所有3个命令都应该在循环终止之前执行。如果没有按下ctrl-c,循环应该继续执行。
有什么建议吗?
答案 0 :(得分:3)
您可以使用trap
来捕获SIGINT信号。 (测试)
#!/bin/sh
trap ctrl_c INT
ctrl_c () {
RUNNING=0
}
RUNNING=1
while [ "$RUNNING" = 1 ]; do
echo 'working'
sleep 1
echo 'on something else'
sleep 1
echo 'done'
done
答案 1 :(得分:1)
像这样(未经测试)
#!/bin/bash
trap "DONE=1" SIGINT
DONE=0
while [ $DONE -eq 0 ]
do
process1
process2
process3
done