我的shell脚本在exec之后停止

时间:2010-10-06 23:35:48

标签: linux shell

我正在编写一个如下所示的shell脚本:

 for i in $ACTIONS_DIR/*
    do
            if [ -x $i ]; then
                    exec $i nap
            fi
    done

现在,我想要实现的是列出$ ACTIONS_DIR中的每个文件以便能够执行它。 $ ACTIONS_DIR下的每个文件都是另一个shell脚本。

现在,问题是在使用exec后脚本停止并且不会转到下一个文件。任何想法为什么会这样?

3 个答案:

答案 0 :(得分:7)

exec取代了shell进程。如果您只想将命令作为子进程调用,请将其删除。

答案 1 :(得分:4)

exec将PID的控制转移到您正在执行的程序上。这主要用于脚本,其唯一目的是为该程序设置选项。一旦命中exec,脚本中的任何内容都不会被执行。

另外,你应该尝试一些引用技巧:

for i in $ACTIONS_DIR/*
    do
        if [ -x "$i" ]; then
                "./$i" nap
        fi
done

您还可以考虑使用find(1)进行此操作:

find $ACTIONS_DIR \
    -maxdepth 1 \
    -type f \
    -perm +0111 \
    -exec {} nap \;

答案 2 :(得分:1)

exec永远不会返回给调用者。试试吧

        if [ -x $i ]; then
                ./$i nap
        fi