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


41.17 batchモード

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

通常はエコーエリアに出力したりストリームとしてt (出力ストリームを参照)を指定するmessageprin1等を使用したLispプログラムの出力はbatchモードではEmacsの標準記述子へと送られます(prin1や他のプリント関数は標準記述子に書き込むがmessageは標準エラー記述子に書き込む)。同様に通常はミニバッファーから読み取られる入力は標準入力から読み取られます。つまりEmacsは非インタラクティブなアプリケーションプログラムのように振る舞います(コマンドのエコーのようにEmacsが通常生成するエコーエリアへの出力はすべて抑制される)。

標準出力やエラー記述子に書き込まれる非ASCIIテキストは、locale-coding-systemが非nilならそれを使用してエンコードされます(localeを参照)。coding-system-for-writeを他のコーディングシステムにバインドすればこれをオーバーライドできます(明示的なエンコードとデコードを参照)。

Variable: noninteractive

Emacsがbatchモードで実行中ならこの変数は非nil

batchモードでEmacsがエラーのシグナルによりexitすると、Emacsのexitステータスは非0です:

$ emacs -Q --batch --eval '(error "foo")'; echo $?
foo
255