shell脚本 - 在退出无限循环之前完成迭代

时间:2014-07-19 07:55:05

标签: shell infinite-loop

我是shell脚本的新手,需要帮助。

我想用无限循环运行一些命令,我​​希望循环在按下ctrl-c时终止,但在终止之前我希望当前迭代完成(意味着循环中的所有语句都应该执行)。

infinite-loop (
   command 1;
   command 2; 
   command 3;
loop-ends

所以在执行的任何一点ctrl-c上,所有3个命令都应该在循环终止之前执行。如果没有按下ctrl-c,循环应该继续执行。

有什么建议吗?

2 个答案:

答案 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