3

Cygwin 的 bash 通常比 Windows 的 cmd 命令 shell 更可取,因此我们在生成 Windows shell 之前使用它来设置我们的环境。但是,在这个生成的 shell 中使用Ctrl-C终止正在运行的进程会导致用户返回 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 进程?

4

3 回答 3

2

Does it have to be in the same window? If not, I have had much better luck with

cygstart cmd

cmd starts in its own window; and only exit closes that window

于 2013-01-30T22:40:40.717 回答
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
于 2013-01-30T21:32:53.393 回答
1

为了补充 悲惨变量的有用答案,解释为什么cmd.exe自己的控制台窗口中打开是最好的方法

  • 虽然您可以尝试解决该Ctrl-C问题,如其他人的回答cmd.exe所示,但行为与常规控制台窗口中的行为并不完全相同:由于每次按下时都会创建一个新实例,因此先前的状态会丢失。cmd.exeCtrl-C

  • Cygwin 终端(控制台窗口)使用 UTF-8 字符编码,而不是基于(旧版)OEM 代码页的常规控制台窗口编码,两者不兼容。

  • 奇怪的是,停留在 Cygwin 终端会导致cmd.exe所有交互式提交的命令(就像您在没有 的批处理文件中获得的那样@echo off)。

要在启动cmd.exe控制台窗口时自动关闭 Cygwin 窗口,请使用
exec cygstart cmd.

于 2017-04-04T22:18:50.643 回答