Bash 如何继续重新启动Windows cmd提示符
Cygwin的bash通常比Windows的cmd命令shell更可取,因此我们在生成Windows shell之前使用它来设置环境。但是,使用Ctrl-Ckills停止在此生成的shell中运行进程的执行将引导用户返回bash shell 我尝试的解决方法:Bash 如何继续重新启动Windows cmd提示符,bash,cmd,cygwin,bash-trap,Bash,Cmd,Cygwin,Bash Trap,Cygwin的bash通常比Windows的cmd命令shell更可取,因此我们在生成Windows shell之前使用它来设置环境。但是,使用Ctrl-Ckills停止在此生成的shell中运行进程的执行将引导用户返回bash shell 我尝试的解决方法: source setupEnvironment.sh restartCommand() { # Reset trap trap restartCommand SIGINT echo -e " === Restarting w
source setupEnvironment.sh
restartCommand() {
# Reset trap
trap restartCommand SIGINT
echo -e " === Restarting windows cmd prompt\n"
cmd /k
}
trap restartCommand SIGINT
echo -e " === Starting windows cmd prompt\n"
cmd /k
这种方法只重新启动cmd一次。未捕获后续的Ctrl-C。有没有办法继续重新启动cmd进程?后续的Ctrl-Cs不会被捕获,因为脚本将在到达末尾时退出 当您按住ctrl-c键时,cmd很可能会返回错误,在这种情况下,您可以这样做
until cmd /k; do true; done
否则,使脚本循环,直到未按下ctrl-c:
trap restart=1 SIGINT
echo -e " === Starting windows cmd prompt\n"
restart=1
while (( restart )); do restart=0; cmd /k; done
它必须在同一个窗口吗?如果不是的话,我的运气要好得多
cygstart cmd
cmd
在其自己的窗口中启动;只有退出才能关闭该窗口,并解释为什么在自己的控制台窗口中打开cmd.exe
是最好的方法,作为补充:
- 虽然您可以尝试解决Ctrl-C问题,如中所示,但其行为与常规
控制台窗口中的行为并不完全相同:因为每次按下Ctrl-C时都会创建cmd.exe
的新实例,所以以前的状态将丢失cmd.exe
- Cygwin终端(控制台窗口)使用UTF-8字符编码,而不是基于(传统)OEM代码页的常规控制台窗口编码,两者不兼容
- 奇怪的是,停留在Cygwin终端会导致
回显所有交互提交的命令(就像在批处理文件中没有cmd.exe
)@echo off
cmd.exe
控制台窗口时自动关闭Cygwin窗口,请使用exec cygstart cmd
很好奇为什么你不能在bash中完成所有事情,为什么你需要启动cmd?@可怜的变量:就个人而言,我很高兴留在bash。但是其他工作人员需要cmd提示符。所以我妥协了:我将调用cmd,但只有在bash中设置好环境之后(bash做得更好!)。谢谢-这两个答案都相当好,可能是我所希望的最好的答案。当CMD处于编译过程中时,CTRL C仍然频繁地返回到BASH。此外,cmd窗口有时会被锁定,可能只有在任务管理器的结束进程时才会关闭。这是一个不错的解决方法。额外的窗口并不理想,但一切都按预期进行。cygstart选项--wait
在这里可能很有用。我试过了,但过程在后台进行,用户不知道。只是一个额外的进程和几MB的RAM,但当你很少重新启动电脑时,这可能会增加。哪个进程?猛击?bash
是如何启动的?另一种选择是,bash进程在使用cygstart启动cmd后退出(不带--wait)。顺便说一句,即使在没有cygstart的情况下启动cmd,bash进程也会停留在memoryhoops中,我的最后一条评论提到了--hide
。这关闭了窗口,但父进程保持活动状态。尝试--等待
似乎也没有什么用处。是的,目前最好的解决方案是cygstart cmd/K;退出
。我没有说的是,这个bash提示符实际上是从一个cmd提示符启动的——因此bash提示符实际上夹在两个cmd提示符之间,用户不知道。因此,退出bash不会退出原始cmd提示符。