繁体   English   中英

在W32 Emacs上,为什么Cygwin或MinGW bash中的Ctrl-D会重复出现EOF?

[英]On W32 Emacs why does Ctrl-D in Cygwin or MinGW bash issues repeated EOFs?

我正在使用带有Cygwin bash 3.2.51的W32 GNU Emacs 24.1.50.1。 我知道这种组合非常麻烦(请参阅EmacsWikiCygwin列表 )。 但是,我现在要解决的问题并不限于Cygwin。 我也遇到了MinGW的问题。 因此,问题是:

在Emacs中,通过Mx shell启动Mx shell前提是您已经适当设置了变量shell-file-nameexplicit-bash-args (请参见例如此处 )。 然后发出一个需要标准输入的命令,例如cat 为了抵消的cat通常可以按Ctrl-d 一次 ,并返回到shell提示符。 在W32 emacs中,执行此操作(或什至当您明确发出Mx 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

当然,重击又退出了。 仅当外壳程序在W32 emacs中运行时才会发生此问题-通过Cygwin tty窗口运行Cygwin bash,并且通过其自己的MinTTY运行MinGW bash正常。

为什么在W32 Emacs中会发生这种情况?在使用W32 Emacs时如何退出退出运行的子命令(例如cat )而不退出bash shell?

就像您期望的那样,tty的概念在W32世界中并不真正存在。 如果您想查看这种Unixy行为,则不仅需要运行Cygwin程序,而且该Cygwin程序需要与另一个Cygwin程序(Emacs,终端,您命名)对话。 IOW,您只能使用Cygwin版本的Emacs来实现。

适用于MS WindowsGNU Emacs常见问题解答指出,外壳缓冲区中的任何子进程都存在此问题。 因此,它也会影响DOS命令行(但是,当然,您通常在DOS中通常不使用Ctrl-D,因此不太明显)。 FAQ中没有建议解决方法,因此我猜测没有简单的解决方法。

通常,您可以使用Ctrl-Z以及Ctrl-D。 看一下这个注释:

http://ignaciopp.wordpress.com/2009/07/02/emacs-shell-workaround-for-killing-input-in-windows-version/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM