可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
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