1

如果我在 bash 提示符下发出这个: $ cmd_1 ; cmd_2

cmd_1 在前台。我可以在不停止 cmd_1 的情况下阻止 cmd_2 运行吗?我要等到 cmd_1 完成,此时 cmd_2 将启动,然后为时已晚。

我认为这是不可能的,但也许有工作控制?

-Z $ bg 是否将两个命令都推送到 bg 中?相反, cmd_1 是否去 bg 并且 cmd_2 是(在哪里?“待定背景?”像@ cmd?)仍在等待 cmd_1 退出?

这些命令不是有条件地调用的,比如“cmd_1 && cmd_2”,这些命令也不是在调用时作为背景的。cmd_1 正在 fg 中运行,cmd_2 尚未执行。

这里的问题是 cmd_1 需要很长时间才能完成, cmd_2 具有破坏性,我真的不想中断并重新执行 cmd_1 。我只想 cmd_1 完成并且 cmd_2 根本不运行。

我可以通过将 cmd_2 移动到 cmd_2.sav 直到 cmd_1 完成并导致“-bash: cmd_2: command not found”导致 cmd_2 失败,但我希望有一个更优雅的解决方案。在 cmd_1 完成之前,其他人可能会使用 cmd_2。(是的,我可以将 cmd_2.real 包装在 cmd_2 包装器中,并带有用户测试或类似的东西,但这种方式很疯狂)。

4

2 回答 2

2

可能有更好的方法,但这会起作用:

  1. 按 Control-Z 暂停 cmd_1。
  2. cmd_2 将开始运行。您可以按 Control-C 来杀死它,或者您可以在第 1 步之前执行“重命名技巧”,这样它就没有机会启动了。
  3. 一旦 cmd_2 被终止/阻止启动,请键入fg以恢复 cmd_1 操作。

如果您想提前尝试以确保获得的行为符合您的预期,请结合使用sleepecho命令进行练习。即,sleep 10; echo "hello"从终端运行。按 Control-Z 暂停 sleep 命令,并输出“hello”。打字fg恢复睡眠。

于 2011-10-25T03:06:26.103 回答
0

在这种特殊情况下,只需添加...

echo "Press a key to begin... ${0}"
read

在开始时cmd_2。这样你就不会严重阻碍想要使用的人cmd_2,并且你给自己一个机会在它破坏你想要保存的东西之前杀死它。

于 2011-10-25T22:16:42.660 回答