EXEC

2010-10-06 20 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