有没有办法在执行任务时(不使用文件)在终端上提供串行任务?


14

假设有2个任务t1t2可以按以下顺序执行:

t1 ; t2
# OR
t1 && t2

现在假设我忘记跑步了t2并且t1已经在跑步了。我可以添加t2到管道中以便在t1完成后执行吗?

Answers:


19

是的你可以:

  1. 通过按+ 暂停当前​​正在运行的作业,并使其带有暂停字符CtrlZ
  2. 输入fg%,将所需的内容添加到列表中并执行,例如:
    fg ; systemctl suspend # or
    % ; systemctl suspend
    由于fg返回了它恢复的作业的返回值,因此,列表操作符喜欢&&并按||预期工作:
    fg && echo "Finished successfully!" # or
    % && echo "Finished successfully!"

man bash/ JOB CONTROL关于暂停字符:

键入 暂停 字符(通常 ^ZControl- Z),而一个进程正在运行的原因,要停止的过程,并将控制返回bash。(…)然后,用户可以使用以下bg命令操纵该作业的状态:在后台fg 继续执行该 命令,在前台继续执行该kill命令,或杀死该命令。A ^Z立即生效,并具有导致待处理的输出和提前输入被丢弃的其他副作用。

fgman bash/ SHELL BUILTIN COMMANDS中进行了解释:

fg [ jobspec ] 在前台
恢复jobspec,并使其成为当前作业。如果不存在jobspec,则使用当前作业的shell概念。返回值是放在前台的命令的返回值;如果在禁用作业控制时运行,或者在启用了作业控制的情况下运行,则返回失败值;如果 jobspec 未指定有效的作业,或者jobspec指定了在没有作业控制的情况下启动的作业。

man bash关于作业控制的进一步阅读(除之外):


+1,但遗憾的是,当您忘记t3t1; t2; t3或时,这种方法将无效t1 && t2 && t3
JoL

@JoL何尝- ^Z^Z并且%-;%+;t3在某些情况下不够好,但它是一个真正的解决问题的办法是远。
甜点

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.