我的shell脚本在exec之后停止

use*_*259 6 linux shell

我正在写一个看起来像这样的shell脚本:

 for i in $ACTIONS_DIR/*
    do
            if [ -x $i ]; then
                    exec $i nap
            fi
    done
Run Code Online (Sandbox Code Playgroud)

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

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

Ign*_*ams 8

exec替换shell进程.如果您只想将命令作为子进程调用,请将其删除.


amp*_*ine 6

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

此外,您应该尝试一些引用技巧:

for i in $ACTIONS_DIR/*
    do
        if [ -x "$i" ]; then
                "./$i" nap
        fi
done
Run Code Online (Sandbox Code Playgroud)

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

find $ACTIONS_DIR \
    -maxdepth 1 \
    -type f \
    -perm +0111 \
    -exec {} nap \;
Run Code Online (Sandbox Code Playgroud)