EXEC

2010-10-06 23 views
6

我在写一个shell脚本,看起来像这样经过我的shell脚本停止:EXEC

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

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

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

回答

5

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

3

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 \; 
+1

'因为我在“$ ACTIONS_DIR”/*'将是一个比较安全,如果我们不知道的目录名称不包含空格(或者,如果我们不知道/控制值'IFS')。 – 2017-10-20 22:05:14

1

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

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

'“$ i”',否则如果程序名称包含空格,则会产生不正常行为。 – 2017-10-20 22:04:25