コマンドラインオプション‘-batch’でEmacsを非対話的に実行できます。このモードではEmacsは端末からコマンドを読み取りません。また終端モード(terminal modes)を変更せずに、消去可能なスクリーンへの出力も待ち受けません。これはLispプログラムの実行を指示して終了したらEmacsが終了するというアイデアです。これを行うには‘-l file’によりfileという名前のライブラリーをロードするか、‘-f function’により引数なしでfunctionを呼び出す、または‘--eval=form’で実行するプログラムを指定できます。
Emacsがbatchモードで実行中ならこの変数は非nil
。
指定されたLispプログラムがバッチモードにおいてハンドルされていないエラーをシグナルすると、EmacsはLispバックトレースを標準エラーストリームに表示するためにLispデバッガを呼び出した後に非0のexitステータスでexitします(デバッガの呼び出しを参照)。
$ emacs -Q --batch --eval '(error "foo")'; echo $?
Error: error ("foo") mapbacktrace(#f(compiled-function (evald func args flags) #<bytecode -0x4f85c5 7c45e2f81>)) debug-early-backtrace() debug-early(error (error "foo")) signal(error ("foo")) error("foo") eval((error "foo") t) command-line-1(("--eval" "(error \"foo\")")) command-line() normal-top-level()
foo 255
通常はエコーエリアに出力したりストリームとして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ジョブではこの制限を元に戻すように調整する必要があります。