如何同时处理多个命令并仅在 ubuntu 上完成所有操作后才继续其余命令

how to process several commands concurrently and continue the rest only after all is done on ubuntu

具体来说,我有两个命令需要运行在shell在Ubuntu同时,例如 command_Acommand_B 。我还有一些其他命令需要 运行 只有在 command_A[=13 之后=]command_B完成,命名为command_rest。另外,command_Acommand_B 运行 在单独的终端中,完成后可以自行关闭。我想这可能需要与 signalwaitgnome-terminal 相关的技术,但我找不到一个解决方案。

你可以像这样使用 fifo 来同步:

# Once in either Terminal
mkfifo A B

# In first Terminal
( echo CommandA; sleep 3; echo done > A ) &

# In second Terminal
( echo CommandB; sleep 8; echo done > B ) &

# In third Terminal
read < A; read < B; echo Rest

基本上,在 Rest 可以 运行 之前,它必须从 AB 中读取一些东西,直到 CommandA 已完成并写入 A 并且 CommandB 已完成并写入 B.

上面只是一个例子,它回显了 CommandACommandB 以及 Rest 而不是 运行ning 我没有的命令。你实际上会想要这样的东西(我已经修改它所以你可以在各种终端的不同目录中)

# Once in either Terminal
mkfifo  /tmp/A  /tmp/B

# In first Terminal
( CommandA; echo done > /tmp/A ) &

# In second Terminal
( CommandB; echo done > /tmp/B ) &

# In third Terminal
read < /tmp/A; read < /tmp/B; commandRest

由于您似乎不太擅长基于 fifo 的同步,您可以尝试使用 GNU Parallel,它在安装后会创建一个符号 link 调用 sem 作为信号量。

因此,在 1 号航站楼,您可以:

sem -j 2 --id mark CommandA

在 2 号航站楼,您可以:

sem -j 2 --id mark CommandB

然后,如果您想等待两者完成,您可以这样做:

sem --id mark --wait ; CommandRest