Bash陷阱 - 仅在循环结束时退出

时间:2014-11-07 09:23:28

标签: bash shell loops

我有一个bash脚本,它有不同的情况 - 每个都有一个for或while循环。我已经声明了一个陷阱函数,以便有机会退出脚本和循环。但是,如果我这样做,脚本将立即退出 - 我想在循环运行结束时退出循环,因为每个循环运行需要很长时间。

以下是我的脚本的简短版本:

CleanUp() {
    echo "Trap exit detected"
    rm -f $TMPFILE1
    rm -f $TMPFILE2
    StopPreventSleep
    echo "... and ready!" && exit
}
trap CleanUp EXIT INT TERM SIGINT SIGTERM SIGTSTP
case $1 in
   check)
          for FILES in "${SRCFILES[@]}"
          do
            [somemagic]
          done
    ;;
    read)
          for FILES in "${SRCFILES[@]}"
          do
            [somemagic]
          done
    ;;
    write)
          while [ -n "$line" ]
          do
            [somemagic]
          done
    ;;

我希望脚本只能在每个循环中执行[somemagic]后退出(取决于参数$1 =选择哪种情况)。

1 个答案:

答案 0 :(得分:1)

更改行

echo "... and ready!" && exit

为:

QUIT=1

在你的每个[somemagic]之后,添加一些额外的逻辑如下:

...
[somemagic]
if [ ! -z $QUIT ]; then
   exit
fi