以干净的方式等待程序(例如在不同的终端窗口中)

以干净的方式等待程序(例如在不同的终端窗口中)

如果你想在第一个命令完成后执行一个命令,然后再执行另一个命令,你可以执行

command1 &

它打印正在执行的进程的 PID command1

command1然后你可以考虑完成后要做什么并执行:

wait [PID printed by the previous command] && command2

command1然而,这只适用于同一个终端窗口,如果打印输出,它会变得非常非常混乱。如果您打开一个新的终端窗口并尝试等待,您会看到如下内容:

$ wait 10668
bash: wait: pid 10668 is not a child of this shell

是否有一个终端模拟器支持等待程序,而不必在当前执行命令的输出中写入下一个命令,而无需丢弃第一个命令的输出(例如将其通过管道传输到/dev/null)?

它不必通过wait或类似的东西来工作。右键单击并选择“当前命令返回后执行”就可以了。

我的意思不是简单地连接命令,而是能够运行命令并然后决定在该任务完成后立即运行什么。

答案1

通常,在给出一个长时间运行的命令后,当您想要准备随后运行的下一个命令时,您可以使用 shell作业控制来实现它。例如,你已经给予了command1,而不是给予&,然后你想要给予command2,所以你暂停通过键入当前正在运行的命令control-z。您现在再次出现 shell 提示符,因此您输入

fg; command2

并且fg将恢复您的第一个命令,当它完成时,shell 将启动您的第二个命令。

如果您确实使用 启动 command1 &,那么它会在后台运行。您可以使用 将其带到前台fg,然后将其暂停,然后像以前一样。

答案2

如果您只想在前一个命令完成后立即运行命令,可以将它们分开,;如下所示:

command1 ; command2

或者,如果您只想在第一个命令返回时运行第二个命令true,如下所示:

command1 && command2

相关内容