My shell script stops after exec

匿名 (未验证) 提交于 2019-12-03 02:13:02

问题:

I'm writing a shell script that looks like this:

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

Now, what I'm trying to achieve is to list every file in $ACTIONS_DIR to be able to execute it. Each file under $ACTIONS_DIR is another shell script.

Now, the problem here is that after using exec the script stops and doesn't go to the next file in line. Any ideas why might this be?

回答1:

exec replaces the shell process. Remove it if you only want to call the command as a subprocess instead.



回答2:

exec transfers control of the PID over to the program you're exec'ing. This is mainly used in scripts whose sole purpose is to set up options to that program. Once the exec is hit, nothing below it in the script is executed.

Also, you should try some quoting techniques:

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

You might also look into using find(1) for this operation:

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


回答3:

exec never returns to the caller. Just try

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


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!