Bash 在Emacs外壳和Cygwin下处理信号

Bash 在Emacs外壳和Cygwin下处理信号,bash,shell,emacs,cygwin,Bash,Shell,Emacs,Cygwin,我使用的是Cygwin版本的Emacs。除了使用emacsshell(M-xshell)时的一些怪癖之外,一切都很好。Emacs shell正在使用Cygwin的bash。目前最大的问题是无法向shell发送SIGINT来中断当前正在运行的命令。例如,我经常使用ssh登录到远程主机,然后使用“tail-f”文件。我无法摆脱尾部命令。在Unix/Linux下使用Emacs shell时,按C-C-C(comint中断子对象)将向shell(bash)发送SIGINT,并且tail命令(或其他命令)

我使用的是Cygwin版本的Emacs。除了使用emacsshell(M-xshell)时的一些怪癖之外,一切都很好。Emacs shell正在使用Cygwin的bash。目前最大的问题是无法向shell发送SIGINT来中断当前正在运行的命令。例如,我经常使用ssh登录到远程主机,然后使用“tail-f”文件。我无法摆脱尾部命令。在Unix/Linux下使用Emacs shell时,按C-C-C(comint中断子对象)将向shell(bash)发送SIGINT,并且tail命令(或其他命令)将按预期中断

对于一个快速简单的示例,请运行“M-xshell”,然后运行“sleep30”,并尝试中断sleep命令。您可以退出(C-g)并在Emacs中执行其他操作,但是Emacs shell在sleep命令期间挂起

我觉得这与Cygwin中的信号发送/处理不同于Unix中的信号有关。由于Cygwin bash shell对信号做出了适当的响应,因此我必须假设有某种方法可以让Emacs以其理解的方式向bash shell发送SIGINT。有什么想法吗


顺便说一下,我使用了Emacs eshell、term和ansi term,但出于一些原因,我更喜欢shell。我也使用mintty和GNU屏幕,对此没有任何抱怨,但使用Emacs shell并将终端会话视为文本文件是一件非常棒的事情。

我认为命令提示符作为tty的问题更多。一般来说,我在向Cygwin和Cygwin中的emacs外壳发送正确的信号时遇到了问题,所以我找到了这个名为puttycyg的程序。Putty有一个很好的外壳,我想让Cygwin有这样的外壳,所以我用这个:


我在我的桌面上创建了一个快捷方式,以便于访问。您可以创建一个会话并从那里调用它“cygwin”,然后创建一个可执行文件的快捷方式,并使用
-load“cygwin”
C-C-C
在cygwin/bash/xemacs中为我工作。啊,是的,C-C-C在xemacs(版本21)中工作正常。谢谢你指出这一点。我希望它能与GNU Emacs 23.2一起使用。看起来这是一个(长期存在的)bug。(). 这个错误需要修复。在那之前,你会错过什么功能,比如说,用eshell代替shell?@vpit3833 FWIW,这个bug在最新版本中得到了修复,因此昨天发布了即将发布的Cygwin 1.7.8.Cygwin 1.7.8。