如何在一行中在bash中运行多个后台命令?

我通常运行多个这样的命令:

sleep 2 && sleep 3 

要么

 sleep 2 ; sleep 3 

但是如果我想在一个命令行命令的后台运行它们呢?

 sleep 2 & && sleep 3 & 

不起作用。 而且也不能replace&& ;

有没有办法做到这一点?

到底你想如何运行? 如果你想让它们在后台启动并顺序运行,你可以这样做:

 (sleep 2; sleep 3) & 

另一方面,如果你想让它们在后台并行运行,你可以这样做:

 sleep 2 & sleep 3 & 

这两种技术可以结合使用,比如:

 (sleep 2; echo first finished) & (sleep 3; echo second finished) & 

Bash被打成一片,经常有许多不同的技术来完成相同的任务,虽然有时他们之间有细微的差别。

你需要在你的最新版本中添加一些parens –

 (sleep 2 &) && (sleep 3 &) 

或者这也适用 –

 (sleep 2 &) ; (sleep 3 &) 

要运行多个后台命令,您需要添加每个命令的结束。 例如: (command1 &) && (command2 &) && (command3 &)

上面的答案使用括号。 Bash也可以使用大括号来达到类似的目的:

 { sleep 2 && sleep 3; } & 

请注意,大括号对语法更加挑剔 – {之前的空格}之后的空格和最终的分号是必需的。 在某些情况下,花括号更有效率,因为它们不分叉新的子shell。 在这种情况下,我不知道它是否有所作为。

这工作:

 $(sleep 2 &) && sleep 3 & 

你也可以做:

 $(sleep 2 && sleep 3) & 

我也有同样的使命。 我试试(sleep2 ; fg )& sleep3 ; fg (sleep2 ; fg )& sleep3 ; fg ,它正在工作。 而当你prerest ctrl + c加倍,这两个进程可以被阻止。