Next: セッションマネージャー, Previous: X11キーシンボルの処理, Up: オペレーティングシステムのインターフェース [Contents][Index]
コマンドラインオプション‘-batch’でEmacsを非対話的に実行できます。このモードではEmacsは端末からコマンドを読み取りません。また終端モード(terminal modes)を変更せずに、消去可能なスクリーンへの出力も待ち受けません。これはLispプログラムの実行を指示して終了したらEmacsが終了するというアイデアです。これを行うには‘-l file’によりfileという名前のライブラリーをロードするか、‘-f function’により引数なしでfunctionを呼び出す、または‘--eval=form’で実行するプログラムを指定できます。
通常はエコーエリアに出力したりストリームとしてt
(出力ストリームを参照)を指定するmessage
やprin1
等を使用したLispプログラムの出力はbatchモードではEmacsの標準記述子へと送られます(prin1
や他のプリント関数は標準記述子に書き込むがmessage
は標準エラー記述子に書き込む)。同様に通常はミニバッファーから読み取られる入力は標準入力から読み取られます。つまりEmacsは非インタラクティブなアプリケーションプログラムのように振る舞います(コマンドのエコーのようにEmacsが通常生成するエコーエリアへの出力はすべて抑制される)。
標準出力やエラー記述子に書き込まれる非ASCIIテキストは、locale-coding-system
が非nil
ならそれを使用してエンコードされます(localeを参照)。coding-system-for-write
を他のコーディングシステムにバインドすればこれをオーバーライドできます(明示的なエンコードとデコードを参照)。
Emacsはbatchモードではgc-cons-percentage
変数の値をデフォルトの‘0.1’から‘1.0’まで増加します。これはガーベージコレクションの実行がデフォルトより少なくなる(そしてメモリー消費は多くなる)ことを意味するので、長時間の実行が予想されるbatchジョブではこの制限を元に戻すように調整する必要があります。
Emacsがbatchモードで実行中ならこの変数は非nil
。
batchモードでEmacsがエラーのシグナルによりexitすると、Emacsのexitステータスは非0です:
$ emacs -Q --batch --eval '(error "foo")'; echo $? foo 255