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)
假设您没有对该命令进行后台处理,那么是的。
例如:
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,它就是为此目的而设计的。