我正在编写一个如下所示的shell脚本:
for i in $ACTIONS_DIR/*
do
if [ -x $i ]; then
exec $i nap
fi
done
现在,我想要实现的是列出$ ACTIONS_DIR中的每个文件以便能够执行它。 $ ACTIONS_DIR下的每个文件都是另一个shell脚本。
现在,问题是在使用exec后脚本停止并且不会转到下一个文件。任何想法为什么会这样?
答案 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