Cygwin的bash通常比Windows的cmd命令shell更好,因此我们在生成Windows shell之前使用它来设置我们的环境。但是,使用 Ctrl-C kill停止在此生成的shell中执行正在运行的进程会将用户引导回bash shell。
我尝试过的解决方法:
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进程?
答案 0 :(得分:2)
是否必须在同一个窗口中?如果没有,我的运气好多了
cygstart cmd
cmd
从它自己的窗口开始;并且只有exit关闭那个窗口
答案 1 :(得分:1)
未捕获后续的Ctrl-C,因为您的脚本由于到达目的而退出。
当您按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
答案 2 :(得分:0)
要补充 Miserable Variable's helpful answer并解释为什么在自己的控制台窗口中打开cmd.exe
是最好的方法:
虽然您可以尝试解决that other guy's answer中演示的 Ctrl-C 问题,但行为与常规cmd.exe
中的行为并不完全相同控制台窗口:由于每按一次 Ctrl-C 就会创建cmd.exe
的新实例,之前的状态将丢失。
Cygwin终端(控制台窗口)使用UTF-8字符编码而不是基于(旧版)OEM代码页的常规控制台窗口编码,两者不兼容。
< / LI>奇怪的是,留在Cygwin终端会导致cmd.exe
回显所有交互式提交的命令(因为您将进入没有@echo off
的批处理文件中)。
要在启动cmd.exe
控制台窗口时自动关闭Cygwin窗口,请使用
exec cygstart cmd
。