Psy*_*aut 10 command-line bash job-control
在 Bash 中,偶尔我会输入一个命令列表并点击Enter,然后才意识到列表末尾附近的某个命令有错误。我知道如果我按Ctrl+C它将终止当前正在运行的命令并取消列表的其余部分。有没有办法在不终止当前运行的命令的情况下取消列表的其余部分?
例如,假设我输入了类似
foo; bar
Run Code Online (Sandbox Code Playgroud)
或者
foo && bar
Run Code Online (Sandbox Code Playgroud)
wherefoo是一个长时间运行的命令,不要中断非常重要,并且会bar执行一些不可逆和不需要的操作(例如,shutdown -h now或rm -rf /)。在foo仍在运行时,是否有一种通用的方法可以告诉外壳让foo完成但bar之后不运行?(是的,我可以更改权限bar,使其不可执行,但如果我想同时使用bar类似的东西,这不是特别方便rm,如果我不拥有bar或者bar是内置的,它也不会工作。)
小智 5
我发现使用CtrlZ将程序转移到后台进程可以达到目的。
foo && bar
Run Code Online (Sandbox Code Playgroud)
感谢 @Arkadiusz Drabczyk 在评论中指出它并foo; bar没有以所需的方式提供控制。
然后:
^Z
[1]+ Stopped foo
Run Code Online (Sandbox Code Playgroud)
该命令仅停止第一个任务并且
fg %1
Run Code Online (Sandbox Code Playgroud)
这只会将任务foo带到前台并完成任务并退出。
PS:这可以通过写入文件的两个脚本来检查。第一个睡了几秒钟,以便有时间放回去。
我不明白为什么CtrlZ只处理正在运行的命令而忽略其余的命令。很想认识一下。