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

Abh*_*pta 14 command-line bash job-control

假设有 2 个任务t1t2它们可以以串行方式执行,如下所示:

t1 ; t2
# OR
t1 && t2
Run Code Online (Sandbox Code Playgroud)

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

des*_*ert 19

是的你可以:

  1. 按+使用挂起字符暂停当前​​正在运行的作业。CtrlZ
  2. 键入fg%,将您想要的内容添加到列表中并执行它,例如:
    fg ; systemctl suspend # or
    % ; systemctl suspend
    Run Code Online (Sandbox Code Playgroud) 由于fg返回它恢复的作业的返回值,列出操作符 like&&并按||预期工作:
    fg && echo "Finished successfully!" # or
    % && echo "Finished successfully!"
    Run Code Online (Sandbox Code Playgroud)

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关于作业控制的进一步阅读(除了):