在执行一些同时执行的命令后运行 bash 命令?

在执行一些同时执行的命令后运行 bash 命令?

我想并行运行一些命令。当所有这些命令完成后,开始下一个命令。我认为以下方法会起作用

#!/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

如果我错了,请纠正我。

相关内容