假设有2个任务t1
,t2
可以按以下顺序执行:
t1 ; t2
# OR
t1 && t2
现在假设我忘记跑步了t2
并且t1
已经在跑步了。我可以添加t2
到管道中以便在t1
完成后执行吗?
假设有2个任务t1
,t2
可以按以下顺序执行:
t1 ; t2
# OR
t1 && t2
现在假设我忘记跑步了t2
并且t1
已经在跑步了。我可以添加t2
到管道中以便在t1
完成后执行吗?
Answers:
是的你可以:
fg
或%
,将所需的内容添加到列表中并执行,例如:
fg ; systemctl suspend # or
% ; systemctl suspend
由于fg
返回了它恢复的作业的返回值,因此,列表操作符喜欢&&
并按||
预期工作:
fg && echo "Finished successfully!" # or
% && echo "Finished successfully!"
man bash
/ JOB CONTROL关于暂停字符:
键入 暂停 字符(通常
^Z
, Control- Z),而一个进程正在运行的原因,要停止的过程,并将控制返回bash
。(…)然后,用户可以使用以下bg
命令操纵该作业的状态:在后台fg
继续执行该 命令,在前台继续执行该kill
命令,或杀死该命令。A^Z
立即生效,并具有导致待处理的输出和提前输入被丢弃的其他副作用。
fg
在man bash
/ SHELL BUILTIN COMMANDS中进行了解释:
fg [ jobspec ] 在前台
恢复jobspec,并使其成为当前作业。如果不存在jobspec,则使用当前作业的shell概念。返回值是放在前台的命令的返回值;如果在禁用作业控制时运行,或者在启用了作业控制的情况下运行,则返回失败值;如果 jobspec 未指定有效的作业,或者jobspec指定了在没有作业控制的情况下启动的作业。
man bash
关于作业控制的进一步阅读(除之外):
^Z^Z
并且%-;%+;t3
在某些情况下不够好,但它是一个真正的解决问题的办法是远。
我在这里看到了这种方法:https : //superuser.com/questions/334272/how-to-run-a-command-after-an-already-running-existing-one-finishes
首先执行Ctrl+ z来停止(挂起)正在运行的命令,然后再运行错过的命令,如下所示:该命令fg && ./missed_cmd.sh
将在fg
完成后立即运行。
该fg
(前台命令)将联机暂停工作和&&
将确保如果第一个命令成功错失命令只运行。
t3
了t1; t2; t3
或时,这种方法将无效t1 && t2 && t3
。