2014-07-19 102 views
1

我对shell脚本非常陌生,在此需要帮助。shell脚本 - 在退出无限循环之前完成迭代

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

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

等在执行的任何点CTRL-C,所有3个命令应该环被终止之前被执行。循环应继续执行,如果没有按下CTRL-C。

任何建议请 -

回答

1

Lik e(未经测试)

#!/bin/bash 
trap "DONE=1" SIGINT 
DONE=0 
while [ $DONE -eq 0 ] 
do 
    process1 
    process2 
    process3 
done 
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