如何在一行中在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加倍,这两个进程可以被阻止。