在后台运行一个命令,但还可以将其他命令连接到它?

在后台运行一个命令,但还可以将其他命令连接到它?

如何在一行中连接多个命令,同时在后台运行它们?这些不起作用:

sleep 1m & && echo "goodbye" & && exit &.
sleep 1m & ; echo "goodbye" & ; exit &.
sleep 1m & echo "goodbye" & exit &.

我必须让所有命令生效前台会话。例如,exit &应该结束前台会话。

注意:我使用它作为该at实用程序的替代品。为什么我需要这种替代方案的故事很长,但可以从我在这里提出的这些问题(并在下面按时间顺序呈现)中看出,遗憾的是我没有找到令人满意的解决方案(关于我的具体情况):

在这里,dataved 的答案似乎很有希望。

答案1

怎么样

pid=$$; ( sleep 1; echo goodbye; kill $pid ) & echo hello

答案2

好吧,IMO,最好的方法是使用 screen 实用程序:

1. screen -R <name-of-the-screen-session>
2. <the-command(s)> 
3. ctrl + a + d ### To exit the screen session
4. To log back: screen -x <name-of-the-screen-session>

答案3

&&是一个条件运算符。当且仅当左侧的命令成功退出时,它将执行右侧的命令。由于您在后台执行左侧的命令,因此无法确定其返回代码,并且事情会中断并且无法按预期工作。

不要使用&&.您应该执行command1 & command2 & command3( command1; command2; command3 )&。第二个将在后台运行的子 shell 中顺序执行所有命令。

相关内容