我正在使用W32 GNU Emacs 24.1.50.1和Cygwin bash 3.2.51。我知道这种组合很麻烦(见EmacsWiki和Cygwin list)。但是我现在要解决的问题并不仅限于Cygwin。我也得到了MinGW的问题。所以,问题是:
在Emacs中,如果您已正确设置变量M-x shell
和shell-file-name
,请通过explicit-bash-args
启动shell(请参阅例如here)。然后发出一个期望stdin输入的命令,例如cat
。要取消cat
,您通常可以键入Ctrl-D 一次,然后返回到shell提示符。在W32 emacs执行此操作时(或者甚至在您明确发出M-x comint-send-eof
时),cat命令退出并且 bash shell也会退出。
我尝试通过将环境变量IGNOREEOF
设置为5来增加bash的“弹性”,但是单个Ctrl-D会导致以下输出
$ Use "exit" to leave the shell.
$ Use "exit" to leave the shell.
$ Use "exit" to leave the shell.
$ Use "exit" to leave the shell.
$ Use "exit" to leave the shell.
$ exit
Process shell finished
当然,bash已经退出了。这个问题只发生在shell运行W32 emacs - Cygwin bash通过Cygwin tty窗口和MinGW bash通过它自己的MinTTY工作正常。
为什么在W32 Emacs中发生这种情况?如何在不退出bash shell的情况下使用W32 Emacs时退出正在运行的子命令(例如cat
)?
答案 0 :(得分:0)
在W32世界中,tty的概念就像你期望的那样。如果你想看到这个Unixy行为,你不仅需要运行一个Cygwin程序,而且Cygwin程序需要与另一个Cygwin程序(Emacs,终端,你命名它)交谈。以下你只能使用Cygwin版本的Emacs。
答案 1 :(得分:0)
GNU Emacs FAQ for MS Windows注意到shell缓冲区中的任何子进程都存在此问题。所以它也会影响DOS命令行(当然你通常不会在DOS中使用Ctrl-D,所以它并不那么引人注目)。常见问题解答中没有建议解决方法,因此我猜测没有简单的解决办法。
答案 2 :(得分:0)
通常你可以使用Ctrl-Z和Ctrl-D。看一下这个说明: