如何继续重新启动Windows cmd提示符

时间:2013-01-30 21:14:29

标签: bash cmd cygwin bash-trap

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进程?

3 个答案:

答案 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