Emacsのシェル、eshell、および用語の違いは何ですか?


60

Emacsでは、次のコマンドを使用してシェルを実行できます-

M-x term

M-x shell

M-x eshell

これら3つの違いは何ですか?

回答:


61

shellこれら3つの選択肢の中で最も古いものです。Emacsを使用しcomint-modeてサブシェルを実行します(例bash)。このモードでは、Emacsを使用してコマンドラインを編集しています。Enterキーを押すまで、サブプロセスには入力が表示されません。Emacsはダム端末のように動作しています。カラーコードはサポートしていますが、カーソルを移動するようなものはサポートしていないため、cursesベースのアプリケーションを実行できません。

termEmacs Lispで書かれたターミナルエミュレーターです。このモードでは、押したキーはサブプロセスに直接送信されます。Emacsではなく、シェルが提供する行編集機能を使用しています。また、カーソル移動などの高度な端末機能を使用するプログラムを実行することもできます(たとえば、実行中nanoまたはlessEmacs内で実行できます)。

eshellEmacs Lispに直接実装されたシェルです。bashサブプロセスとして実行している、または他のシェルはありません。その結果、構文はbashor とまったく同じではありませんsh。プロセスの出力を直接Emacsバッファーにリダイレクトする(try echo hello >#<buffer results>)などのことができます。


19

Xahleeページによると:

shell オペレーティングシステムのコマンドラインインターフェイスへの標準emacsインターフェイスです。

term(ansi-termは今日のtermとほぼ同じです。異なるパッケージでしたが、現在は両方ともterm.elで定義されています)はターミナルエミュレータです。{xterm、gnome-terminal、puTTY}などの専用端末アプリのように動作します。emacsシェルインターフェイスよりも多くのシェルアプリと互換性がありますが、カーソルの移動などの標準のemacsキーはここでは機能しません(端末をエミュレートしているため)。

eshell完全にemacs lispで書かれたシェルです。注:bashエミュレーターではありません。Eshellはそれ自体がシェルですが、bashまたは他のシェルに似ています。

どちらを使うべきですか?

それはあなたの好みに依存します。

shell {grep、du、ls、sort、cat、head、tail、uname、…}などのクラシック/標準のUNIXシェルコマンドの一般的な使用に適しています。

term & ansi-term sshや他のコマンドラインインタラクティブインターフェイス({python、ruby、lisp}シェルなど)や{vim、synaptic、…}などのテキストベースのGUIアプリを実行する場合に適しています。

eshell 特に、bashがインストールされていないMicrosoft Windowsで、または、eshellがemacs lispに直接アクセスするため、emacs lispプログラマーである場合に適しています。


あなたが言及したすべてのコマンド(grep、du、lsなど)は、シェルに組み込まれたプログラムとコマンドです。eshellこれらのプログラムがインストールされている場合も、それらがあります。
バート

1
お使いのシステムであなたのgrepを削除し、ESHELLでgrepのアクションを実行しよう@Bart、あなたはESHELLでのgrepは、お使いのシステムにはgrepされていないことがわかりますwhich grepeshllに`EM-でコンパイルされたLisp関数「ESHELL / grepのです」と言いますunix.el 'は、システム内のgrepをeshellで実行できるため、eshellはgrepなどの小さなツールがインストールされていないMSで非常に便利だと言ったように。
コーディチャン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.