我正在寻找类似的东西,command1 ; command2
即如何运行command2
,command1
但我想计划执行command2
何时command1
已经运行。
只需键入command2
并通过 Enter 确认即可解决,假设command1
不消耗标准输入,并且command1
不会在输出中产生太多文本,因此键入不切实际(键入的字符与command1
输出混合)。
我正在寻找类似的东西,command1 ; command2
即如何运行command2
,command1
但我想计划执行command2
何时command1
已经运行。
只需键入command2
并通过 Enter 确认即可解决,假设command1
不消耗标准输入,并且command1
不会在输出中产生太多文本,因此键入不切实际(键入的字符与command1
输出混合)。
通常我做的是:Ctrl+Z
fg && command2
bg
)在您键入 command2 时在后台恢复 command1。fg && command2
如果 command1 成功,则在前台恢复 command1 并随后将 command2 排队。如果您愿意,您当然可以替换;
或替换。||
&&
启动命令
按Ctrl+暂停执行Z
通过执行找到暂停命令的作业号(它通常已经打印到控制台何时到控制台何时命令暂停)
让我们
command1
在后台继续计划执行
command2
以等待完成command1
文档作业控制内置
有几种选择。
使用一个 &号“推到后台”,第二个程序在第一个程序启动后启动,但它们可能会彼此并排运行。
使用两个与号“逻辑与”,第二个程序只有在第一个程序成功完成时才会启动。
用分号分隔命令行中的命令,第二个程序将在第一个程序完成时启动,即使它失败或被中断。
如果它已经从同一个 shell(在同一个终端窗口中)运行,您可以使用
wait <PID>
等待第一个命令完成。否则,如果第一个命令已经从另一个 shell(在另一个窗口中)运行,您可以使用一个小的while 循环,使用 ps 来检查 PID 是否仍然被
ps
. 当不再找到时,将启动第二个命令。此演示示例用于
bash
检查是否top
通过 PID 运行,并运行命令如果/何时
top
不再运行。标准方法是让命令 1 在后台启动,然后让命令 2 在后台或前台启动。完整的命令是这样的:
&
不是这两个命令之间的连接器。它可以单独使用以command1
使其在后台启动:这是在后台启动这两个命令的正确语法:
如果您可以选择使用两个终端,您可以执行以下操作:
ps -ef | grep <command1>
(您可能希望在 grep 命令中正确形成过滤器字符串,这样您就不会意外地找到另一个进程作为子字符串)。wait <command1_pid> ; command2
基本上,
wait
它是一个 bash 内置命令,等待提供的 PID 退出然后返回。您只是将等待 command1 完成的任务委托给 bash 的wait
命令。