Bash在没有tty / job控件的情况下等待非交互式shell中的异步作业

时间:2015-04-03 20:51:37

标签: bash

我尝试使用在非交互式shell中运行的bash脚本并行运行多个作业。

我不希望主脚本终止,直到所有子进程也终止。

以下是我尝试做的一个例子:

while (( "$#" )); do
  some_long_task "$1" &
done

for job in `jobs -p`; do
  wait $job || echo 'Could not wait for job: ' $job
done

给我bash:no job control in this shell作为错误,并在完成工作之前终止。

如何让bash等待每个子进程?

2 个答案:

答案 0 :(得分:2)

没有参数的

wait等待所有子进程,这似乎正是您所需要的。似乎在禁用作业控制的情况下工作正常。

答案 1 :(得分:0)

你可以有这样的东西

   while (( "$#" )); do
      some_long_task "$1" &
      eval pid='$pid $!'
    done

    wait $pid

由于