我通常运行多个命令,就像这样:
sleep 2 && sleep 3
or
sleep 2 ; sleep 3
但是如果我想从一个命令行命令在后台运行它们呢?
sleep 2 & && sleep 3 &
是行不通的。将&&替换为;
有办法吗?
我通常运行多个命令,就像这样:
sleep 2 && sleep 3
or
sleep 2 ; sleep 3
但是如果我想从一个命令行命令在后台运行它们呢?
sleep 2 & && sleep 3 &
是行不通的。将&&替换为;
有办法吗?
当前回答
我也有同样的使命。 我试过了。Fg)& sleep3;fg,它的工作。 而当你按下ctrl+c double键时,这两个进程就可以停止了。
其他回答
你需要在你的上一个版本中添加一些括号
(sleep 2 &) && (sleep 3 &)
或者这个也可以
(sleep 2 &) ; (sleep 3 &)
我也有同样的使命。 我试过了。Fg)& sleep3;fg,它的工作。 而当你按下ctrl+c double键时,这两个进程就可以停止了。
如此:
$(sleep 2 &) && sleep 3 &
你还可以:
$(sleep 2 && sleep 3) &
你可以像这样使用bash命令替换$(命令):
$(command1 ; command2) &
请注意,stdin和stdout仍然链接到父进程,重定向至少是stdout可能很棘手。因此,您也可以将命令链接到一行中,然后将字符串传递给bash命令以生成一个将处理执行的新进程。
bash -c "command1 ; command2" &
当您需要在后台运行多个命令时,这在bash脚本中特别有用。
这两个表述应该是等价的。在这两种情况下都会生成一个bash进程来处理命令(命令链),而末尾的&将分离执行。
这一次,您可以在命令末尾的&之前添加&>/dev/null,以至少重定向标准输出,并避免父进程的标准输出上的输出。喜欢的东西:
bash -c "command1 ; command2" &>/dev/null &
上面的答案用圆括号。Bash也可以使用大括号达到类似的目的:
{ sleep 2 && sleep 3; } &
注意,大括号在语法上更挑剔——{后面的空格,}前面的空格,以及最后的分号是必需的。在某些情况下,大括号更有效,因为它们不会派生新的子shell。在这种情况下,我不知道是否有区别。