我想并行运行一些命令。当所有这些命令完成后,开始下一个命令。我认为以下方法会起作用
#!/bin/bash
command1 &
command2 &
command3 &&
command4
但事实并非如此。我需要command4
在前三个命令完全完成后运行。
答案1
#!/bin/bash
command1 &
command2 &
command3 &
wait
command4
wait
(不带任何参数)将等待,直到所有后台进程退出。
wait
手册中的完整描述bash
:
wait [-n] [n ...]
等待每个指定的子进程并返回其终止状态。每个
n
可能是一个进程 ID 或一个作业规范;如果给出了作业规范,则等待该作业管道中的所有进程。 如果n
未给出,则等待所有当前活动的子进程,并且返回状态为零。 如果-n
提供了该选项,则wait
等待任何作业终止并返回其退出状态。如果n
指定不存在的进程或作业,则返回状态为127。否则,返回状态为最后等待的进程或作业的退出状态。
答案2
我喜欢这个wait
答案,但作为一项学术练习,我认为这也可行:
bash -c 'command1 & command2 & command3 &' && command4
如果我错了,请纠正我。