我将 W32 GNU Emacs 24.1.50.1 与 Cygwin bash 3.2.51 一起使用。我知道这种组合很麻烦(参见EmacsWiki和Cygwin 列表)。但是,我现在要解决的问题不仅限于 Cygwin。我也遇到了 MinGW 的问题。所以,问题是:
在 Emacs 中,M-x shell
如果您已经设置了变量shell-file-name
并explicit-bash-args
适当地设置了一个 shell(参见例如这里)。然后发出一个需要标准输入的命令,例如cat
. 要取消,cat
通常可以键入 Ctrl-D一次,然后返回到 shell 提示符。在 W32 emacs 中,当您执行此操作时(甚至当您显式发出M-x comint-send-eof
)时,cat 命令将退出并且bash shell 也会退出。
我试图通过将环境变量设置为 5 来增加 bash 的“弹性” IGNOREEOF
,但随后单个 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 中会发生这种情况,我如何cat
在使用 W32 Emacs 时退出正在运行的子命令(例如)而不退出 bash shell?