Emacsでは、次のコマンドを使用してシェルを実行できます-
M-x term
M-x Shell
M-x eshell
これら3つの違いは何ですか?
Shell
は、これら3つの選択肢の中で最も古いものです。 Emacsのcomint-mode
を使用してサブシェルを実行します(例:bash
)。このモードでは、Emacsを使用してコマンドラインを編集します。 Enterを押すまで、サブプロセスには入力が表示されません。 Emacsはダム端末のように振る舞っています。カラーコードはサポートしていますが、カーソルの移動などはサポートしていないため、cursesベースのアプリケーションを実行できません。
term
は、Emacs LISPで記述された端末エミュレーターです。このモードでは、押すキーはサブプロセスに直接送信されます。 Emacsの行編集機能ではなく、Shellが提供する行編集機能を使用しています。また、カーソル移動などの高度なターミナル機能を使用するプログラムを実行することもできます(たとえば、Emacs内でnano
またはless
を実行できます)。
eshell
は、Emacs LISPに直接実装されたシェルです。 bash
またはその他のシェルをサブプロセスとして実行していません。その結果、構文はbash
またはsh
とまったく同じではありません。これにより、プロセスの出力をEmacsバッファーに直接リダイレクトすることができます(echo hello >#<buffer results>
を試してください)。
Xahleeページ によると:
Shell
は、オペレーティングシステムのコマンドラインインターフェイスへの標準emacsインターフェイスです。
term
(ansi-termは今日のtermとほとんど同じです。これらは異なるパッケージでしたが、現在どちらもterm.elで定義されています)は端末エミュレーターです。 {xterm、gnome-terminal、PuTTY}などの専用端末アプリのように動作します。 emacs Shellインターフェースよりも多くのShellアプリと互換性がありますが、カーソルの移動などの標準のemacsキーはここでは機能しません(端末をエミュレートしているためです)。
eshell
は、完全にemacs LISPで記述されたシェルです。注:これはbashエミュレーターではありません。 Eshellはそれ自体がシェルですが、bashや他のシェルに似ています。
どちらを使用しますか?
それはあなたの好みに依存します。
Shell
は、{grep、du、ls、sort、cat、head、tail、uname、…}などの、クラシック/標準のUNIXシェルコマンドの一般的な使用に適しています。
term & ansi-term
は、sshや他のコマンドラインインタラクティブインターフェイス({python、Ruby、LISP} Shellなど)、またはテキストベースのGUIアプリ({vim、synaptic、…}など)を実行する場合に適しています。
eshell
は、bashがインストールされていないMicrosoft Windowsで特に役立ちます。または、emacs LISPプログラマーの場合は、eshellがemacs LISPに直接アクセスできるためです。