Next: , Previous: , Up: オペレーティングシステムのインターフェース   [Contents][Index]


42.17 batchモード

コマンドラインオプション‘-batch’でEmacsを非対話的に実行できます。このモードではEmacsは端末からコマンドを読み取りません。また終端モード(terminal modes)を変更せずに、消去可能なスクリーンへの出力も待ち受けません。これはLispプログラムの実行を指示して終了したらEmacsが終了するというアイデアです。これを行うには‘-l file’によりfileという名前のライブラリーをロードするか、‘-f function’により引数なしでfunctionを呼び出す、または‘--eval=form’で実行するプログラムを指定できます。

Variable: noninteractive

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 (出力ストリームを参照)を指定するmessageprin1等を使用した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ジョブではこの制限を元に戻すように調整する必要があります。