如何在一行中连接多个命令,同时在后台运行它们?这些不起作用:
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 中顺序执行所有命令。