Next: , Previous: , Up: Shell   [Contents][Index]


37.2 対話的なサブシェル

対話的にサブシェルを実行するには、M-x shellとタイプします。これは*shell*という名前のバッファーを作成(または再使用)して、そのバッファーにたいして入出力を行なう、シェルのサブプロセスを実行します。つまりサブシェルからの端末出力はポイントの後に挿入されてポイントを進め、サブシェルにたいする端末入力はそのバッファーのテキストになります。サブシェルにたいして入力を与えるには、バッファーの最後に移動して入力をタイプし、RETで終了します。

サブシェルがコマンドの実行を待つ間、ウィンドウまたはバッファーを切り替えてEmacsで他の編集を行なうことができます。Emacsはそれを処理するときがきたら(たとえばキーボード入力待ちになったとき)、サブシェルからの出力をShellバッファーに挿入します。

Shellバッファーでは、プロンプトはフェイスcomint-highlight-promptで表示され、サブミットされた入力行はフェイスcomint-highlight-inputで表示されます。これにより入力行とシェル出力を容易に区別することができます。Facesを参照してください。

複数のサブシェルを作成するには、(C-u M-x shell)のように)プレフィクス引数を指定してM-x shellを呼び出します。その後、このコマンドはバッファー名を読み取り、そのバッファーでサブシェルを作成(または再使用)します。M-x rename-uniquelyを使用して*shell*バッファーをリネームしてから、M-x shellで新しい*shell*バッファーを作成することもできます。異なるバッファーのサブシェルは、並行して独立に実行されます。

M-x shellによりシェルファイル名を指定するには、変数explicit-shell-file-nameをカスタマイズします。これがnil(デフォルト)の場合、もし存在すればEmacsは環境変数ESHELLを使用します。そうでない場合は通常、変数shell-file-nameを使用します(Single Shellを参照してください)。しかしデフォルトディレクトリーがリモートの場合(Remote Filesを参照してください)、シェルファイル名の入力を求めます。

Emacsは新しいシェルにたいする入力として、もしそれが存在すればファイル~/.emacs_shellnameの内容を送ります。ここでshellnameは、そのシェルがロードされたファイルの名前です。たとえばbashを使う場合、送られるファイルは~/.emacs_bashになります。ファイルが見つからない場合、Emacsは~/.emacs.d/init_shellname.shの使用を試みます。

シェルにたいしてコーディングシステムを指定するには、M-x shellの直前にコマンドC-x RET cを使用します。C-x RET pとタイプすることにより、実行されているサブシェルにたいするコーディングシステムを変更することもできます。Communication Codingを参照してください。

サブシェルでは、Emacsは環境変数INSIDE_EMACSに‘version,comint’をセットします。ここでversionは、Emacsのバージョン(たとえば‘24.1’)です。プログラムはこの変数をチェックして、Emacsの内部で実行されているかを判断することができます(環境変数EMACSが定義されていない場合は、環境変数EMACStにセットします。しかし、この環境変数は時代遅れなので、これを使うプログラムは、かわりにINSIDE_EMACSを使うべきです)。