Bash作业控制-是否可以在不首先终止的情况下终止列表中的第二个命令?
如果我在bash提示符下发出这个命令:$cmd_1;cmd_2 cmd_1在前景中。我可以在不停止cmd_1的情况下阻止cmd_2运行吗?我必须等到cmd_1完成,此时cmd_2将开始,然后就太晚了 我不认为这是可能的,但也许有工作控制 a-Z$bg是否将这两个命令都推送到bg中?更确切地说,cmd_1是否转到背景,cmd_2(在哪里?“挂起的背景?”如@cmd?)是否仍在等待cmd_1退出 这些命令不是有条件地调用的,即“cmd_1&&cmd_2”,也不是基于调用的命令。cmd_1正在fg中运行,cmd_2尚未执行 这里的facepalm是,cmd_1需要很长时间才能完成,cmd_2是破坏性的,我真的不想打断并再次执行cmd_1。我只希望cmd_1完成,cmd_2根本不运行Bash作业控制-是否可以在不首先终止的情况下终止列表中的第二个命令?,bash,background-process,job-control,Bash,Background Process,Job Control,如果我在bash提示符下发出这个命令:$cmd_1;cmd_2 cmd_1在前景中。我可以在不停止cmd_1的情况下阻止cmd_2运行吗?我必须等到cmd_1完成,此时cmd_2将开始,然后就太晚了 我不认为这是可能的,但也许有工作控制 a-Z$bg是否将这两个命令都推送到bg中?更确切地说,cmd_1是否转到背景,cmd_2(在哪里?“挂起的背景?”如@cmd?)是否仍在等待cmd_1退出 这些命令不是有条件地调用的,即“cmd_1&&cmd_2”,也不是基于调用的命令。cmd_1正在fg中运
我可以通过将cmd_2移动到cmd_2.sav直到cmd_1完成并导致“-bash:cmd_2:command not found”而导致cmd_2失败,但我希望有一个更优雅的解决方案。cmd_2可能在cmd_1完成之前被其他人使用。(是的,我可以用cmd_2包装器包装cmd_2.real,并进行用户测试或类似的测试,但这种方法存在疯狂)。可能有更好的方法,但这会起作用:
fg
继续cmd_1操作如果您想提前尝试此方法,以确保您得到的行为符合预期,请结合使用
sleep
和echo
命令进行练习。i、 例如,运行sleep 10;从终端回显“hello”
。按Control-Z暂停sleep命令,并输出“hello”。键入fg
恢复睡眠。在这种情况下,只需添加
echo "Press a key to begin... ${0}"
read
在
cmd_2
的开头。这样,你就不会严重妨碍想要使用cmd_2
的人,你也给自己一个机会在它破坏你想要保存的东西之前杀死它。你的假设是错误的。Cmd2将仅在cmd1完成时运行。请尝试cmd1&&cmd2
使其仅在cmd1成功时运行。感谢您对cmd2启动时间的说明。问题假设命令已被调用,而不是另一种调用方法。问题是如何修改“命令堆栈”中的挂起命令(假定在解释器中有这样的事情)。我重新阅读了注释,发现问题的措辞有点混乱。编辑。