1

Cygwin bash 3.2.51 で W32 GNU Emacs 24.1.50.1 を使用しています。この組み合わせが非常に厄介であることはわかっています ( EmacsWikiCygwin の一覧を参照してください)。しかし、私が今解決したい問題はCygwinに限ったことではありません。MinGWでも問題が発生しました。したがって、問題は次のとおりです。

Emacs では、変数を適切M-x shellに設定した場合に、シェルを起動します (たとえば、こちらを参照)。次に、stdin 入力を期待するコマンドを発行します。キャンセルするには、通常、Ctrl-Dを 1 回入力すると、シェル プロンプトに戻ります。W32 emacs では、これを行うと (または明示的に発行した場合でも)、 cat コマンドが終了、bash シェルも終了します。shell-file-nameexplicit-bash-argscatcatM-x comint-send-eof

環境変数をたとえば 5 に設定して、bash の「回復力」を高めようとしましたIGNOREEOFが、Ctrl-D を 1 回実行すると、次の出力が得られます。

$ 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 は再び終了しました。この問題は、シェルが W32 emacs で実行されている場合にのみ発生します。Cygwin tty ウィンドウを介した Cygwin bash と、独自の MinTTY を介した MinGW bash は正常に動作します。

catW32 Emacs でこれが発生するのはなぜですか? また、bash シェルを終了せずに W32 Emacs を使用しているときに、実行中のサブコマンド (例: ) を終了するにはどうすればよいですか?

4

3 に答える 3

0

あなたが期待するようなttyの概念は、W32の世界には実際には存在しません。このUnixの動作を確認したい場合は、Cygwinプログラムを実行するだけでなく、そのCygwinプログラムが別のCygwinプログラム(Emacs、ターミナル、名前を付けます)と通信する必要があります。IOWは、CygwinバージョンのEmacsでのみそれを取得します。

于 2012-10-20T15:45:30.793 に答える
0

通常、Ctrl-Z と Ctrl-D を使用できます。このメモを見てください:

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

于 2012-12-31T18:01:42.590 に答える
0

MS WindowsのGNU Emacs FAQ には、この問題がシェル バッファ内のサブプロセスに存在することが記載されています。したがって、これは DOS コマンド ラインにも影響します (もちろん、通常 DOS では Ctrl-D を使用しないため、それほど目立ちません)。FAQ には回避策が提案されていないので、簡単な修正はないと思います。

于 2012-10-25T17:49:24.970 に答える