我有一个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
=选择哪种情况)。
答案 0 :(得分:1)
更改行
echo "... and ready!" && exit
为:
QUIT=1
在你的每个[somemagic]之后,添加一些额外的逻辑如下:
...
[somemagic]
if [ ! -z $QUIT ]; then
exit
fi