Bash Shell脚本-“;“等等”;不等待所有进程完成

Bash Shell脚本-“;“等等”;不等待所有进程完成,bash,shell,docker,parallel-processing,wait,Bash,Shell,Docker,Parallel Processing,Wait,在shell脚本中,我正在构建一些docker图像(在后台),一旦完成,我将运行它们(在后台),然后我必须等待它们全部完成。代码如下所示: for tag in "${tags[@]}" do docker build -f dockerFilePath -t $tag . & done wait for tag in "${tags[@]}" do docker run $tag arg1 arg2 | tee logoutput & done wait

在shell脚本中,我正在构建一些docker图像(在后台),一旦完成,我将运行它们(在后台),然后我必须等待它们全部完成。代码如下所示:

for tag in "${tags[@]}"
do
    docker build -f dockerFilePath -t $tag . &
done

wait

for tag in "${tags[@]}"
do 
    docker run $tag arg1 arg2 | tee logoutput &
done

wait
问题在于,并非第二个等待部分中的所有docker运行命令都能够完成。docker run命令需要不同的时间来完成,其中任何一个命令都是不完整的(总共4个)


此外,我还了解到wait只适用于调用wait的进程的直接子进程,在本例中,我认为所有docker build和docker run命令都是脚本进程的直接子进程。或者这种假设是错误的?

@是的,这很好,因为构建速度非常快,因为它是从缓存中完成的,所以它们几乎是瞬间完成的。对于某些调试,在
等待之前和之后插入
作业可能很有用。。。。在
等待
之后,它不应显示任何内容。。。一个
ps
(带有一些参数,可能是
-f
)也可能有助于验证作业是否仍在运行。。。(当从命令行运行时,
b
set
选项可能会让您认为正在进行的事情比您想象的要多…)考虑使用GNU并行,您的脚本将变为两行,并且更加可控、可记录和可重启<代码>并行--干运行docker构建-f dockerFilePath-t$tag.::“${tags[@]}”