Shell脚本,用于循环,循环会等待命令执行以进行迭代

Ank*_*hal 5 bash shell for-loop exec

我有一个带for循环的shell脚本。循环是否在迭代之前在其主体中等待命令的执行?

提前致谢

这是我的代码。这些命令将顺序执行还是并行执行?

for m in "${mode[@]}" 
    do 
        cmd="exec $perlExecutablePath $perlScriptFilePath --owner $j -rel $i -m $m"
        $cmd
        eval "$cmd"
    done
Run Code Online (Sandbox Code Playgroud)

Tom*_*ech 5

假设您没有对该命令进行后台处理,那么是的。

例如:

for i in {1..10}; do cmd; done
Run Code Online (Sandbox Code Playgroud)

cmd在继续循环之前等待完成,而:

for i in {1..10}; do cmd &; done
Run Code Online (Sandbox Code Playgroud)

没有。

如果您想并行运行命令,我建议将循环更改为如下所示:

for m in "${mode[@]}" 
do 
    "$perlExecutablePath" "$perlScriptFilePath" --owner "$j" -rel "$i" -m "$m" &
done
Run Code Online (Sandbox Code Playgroud)

这会在后台运行每个命令,因此它不会等待一个命令完成后才开始下一个命令。

另一种选择是查看GNU Parallel,它就是为此目的而设计的。