Next: Shell Arguments, Up: Processes [Contents][Index]
内部でプログラムを実行するサブプロセスを作成するために、3つのプリミティブが存在します。1つはstart-process
で、これは非同期プロセスを作成して、プロセスオブジェクトをリターンします(Asynchronous Processesを参照)。他の2つはcall-process
とcall-process-region
で、これらは同期プロセスを作成して、プロセスオブジェクとをリターンしません(Synchronous Processesを参照)。特定のタイプのプロセスを実行するために、これらのプリミティブを利用する、さまざまな高レベル関数が存在します。
同期プロセスと非同期プロセスについては、以降のセクションで説明します。この3つの関数はすべて類似した様式で呼び出されるので、ここではそれらに共通の引数について説明します。
すべての場合において、その関数のprogram引数は、実行するプログラムを指定します。ファイルが見つからなかったり、実行できない場合は、エラーがシグナルされます。ファイル名が相対的な場合、検索するディレクトリーのリストは、変数exec-path
に格納されています。Emacsは起動時、環境変数PATH
の値にもとづいて、exec-path
を初期化します。exec-path
内では、標準的なファイル名構成要素‘~’、‘.’、‘..’は通常どおり解釈されますが、環境変数の置換(‘$HOME’等)は認識されません。それらの置換を行うには、substitute-in-file-name
を使用してください(File Name Expansionを参照)。このリスト内でnil
は、default-directory
を参照します。
プログラムの実行では指定された名前にサフィックスの追加を試みることもできます:
この変数は指定されたプログラムファイル名への追加を試みるためのサフィックス(文字列)のリスト。指定されたとおりの名前を試みたいならリストに""
を含めること。デフォルト値はシステム依存。
注意してください: 引数programにはプログラム名だけが含まれ、コマンドライン引数を含めることはできない。これらを提供するために、以下で説明する別の引数argsを使用しなければならない。
サブプロセス作成関数にはそれぞれ、buffer-or-name引数があります。これはプログラムの標準出力の行き先を指定します。これはバッファーかバッファー名であるべきです。バッファー名なら、もしそのバッファーがまだ作成されていなければ、そのバッファーを作成します。nil
を指定することもでき、その場合はカスタム製のフィルター関数が出力を処理するのでなければ、出力を破棄するよう指示します(Filter Functions、およびRead and Printを参照のこと)。通常は、出力がランダムに混在してしまうため、同一バッファーに複数プロセスの出力を送信するのは避けるべきです。同期プロセスにたいしては、バッファーのかわりにファイルに出力を送信できます。
これら3つのサブプロセス作成関数はすべて、&rest
引数であるargsをもっています。argsはすべて文字列でなければならず、それらは個別のコマンドライン引数として、programに与えられます。これらの文字列は指定されたプログラムに直接渡されるので、文字列内ではワイルドカード文字やその他のshell構成要素は特別な意味をもちません。
サブプロセスはその環境をEmacsから継承しますが、process-environment
でそれをオーバーラードするよう指定することができます。System Environmentを参照してください。サブプロセスは自身のカレントディレクトリーをdefault-directory
の値から取得します。
この変数の値はGNU
Emacsとともに配布されて、Emacsにより呼び出されることを意図したプログラムを含むディレクトリーの名前(文字列)。プログラムmovemail
はそのようなプログラムの例であり、Rmailはinboxから新しいメールを読み込むためにこのプログラムを使用する。
この変数の値は、サブプロセス内で実行するためのプログラムを検索するための、ディレクトリーのリストである。要素はそれぞれ、ディレクトリーの名前(文字列)、またはnil
のいずれかである。nil
はデフォルトディレクトリー(default-directory
の値)を意味する。
exec-path
の値は、program引数が絶対ファイル名でないときにcall-process
とstart-process
により使用される。
一般的にはexec-path
を直接変更するべきではない。かわりにEmacs起動前に環境変数PATH
が適切にセットされているか確認すること。PATH
とは独立にexec-path
の変更を試みると混乱した結果へと導かれ得る。