bash for循环中的后台进程

bash for循环中的后台进程,bash,for-loop,ubuntu-14.04,background-process,Bash,For Loop,Ubuntu 14.04,Background Process,在Ubuntu 14.04上,我有一些Python脚本需要在一系列输入上运行。其中一些可以并行运行,因此我将它们作为后台进程从bash脚本启动(如下所示) 因此,我希望分10批运行Python脚本,然后等待整个批完成,然后再转到下一批10,因此使用wait命令 但是,我发现当我运行这个bash脚本时,script_2.py会在前20个输入值上运行,而不仅仅是前10个,作为后台进程。此外,在第一批执行20次之后,脚本将继续按需要执行10次。有没有一个明显的原因,为什么会发生这种情况,我如何才能防止

在Ubuntu 14.04上,我有一些Python脚本需要在一系列输入上运行。其中一些可以并行运行,因此我将它们作为后台进程从bash脚本启动(如下所示)

因此,我希望分10批运行Python脚本,然后等待整个批完成,然后再转到下一批10,因此使用
wait
命令

但是,我发现当我运行这个bash脚本时,script_2.py会在前20个输入值上运行,而不仅仅是前10个,作为后台进程。此外,在第一批执行20次之后,脚本将继续按需要执行10次。有没有一个明显的原因,为什么会发生这种情况,我如何才能防止它这样做


干杯

我看不出你的代码有任何错误。我脑海中出现的唯一可能的解释是,脚本_2.py的前10次执行几乎立即退出,因此您会觉得第一次并行执行了20个实例。我会在脚本中添加一些调试代码来检查这一点。比如:

...
for b in {0..9} ; do
    t=$(($a + $b))
    echo "now running script_2.py with t=${t}" >> mylog.txt
    python script_2.py $m $t &
done
echo "now waiting..." >> mylog.txt
wait
...

在OSX上运行良好。您是否真的在shebang中使用了
bash
...
for b in {0..9} ; do
    t=$(($a + $b))
    echo "now running script_2.py with t=${t}" >> mylog.txt
    python script_2.py $m $t &
done
echo "now waiting..." >> mylog.txt
wait
...