2010年9月26日日曜日

“シェルスクリプトを実行” アクションのメモ

Mac OS X に標準で入っている “シェルスクリプトを実行” アクションの使い方のまとめです。実はスクリプトからエラーを返してワークフローを停止させることができるなど、undocumented な機能があったり、知らないとおかしな挙動になったりする部分があるので、まとめておきます。

以下の記述は “シェルスクリプトを実行” アクションのバージョンは 2.0.1 を元にしています。

実行可能なシェルおよびスクリプト言語

  • bash / csh / ksh / sh / tcsh / zsh
  • perl / python / ruby

ユーザスクリプト実行時の環境

カレントディレクトリは、ホームディレクトリに設定される。

環境変数は、基本的には各シェルに依存する。ホームディレクトリの rc ファイルはシェル起動時に読み込まれる。Terminal で実行した場合の差異として、Automator は環境変数 LANG を設定しないので注意が必要である。

アクションとユーザスクリプトの間の規約

前段のアクションからの入力はテキストのみ、ユーザスクリプトは標準入力または引数から受け取る。

続行のアクションへの出力はテキストのみ、ユーザスクリプトは標準出力へ引き渡す。

ユーザスクリプトは実行終了時に終了ステータスを返さなければならない。0 の場合は、正常終了を意味し、ワークフローの制御が後続のアクションに渡る。それ以外の場合は、異常終了を意味し、Automator は ワークフローの実行を停止し、ユーザにエラーが発生したことが通知する。この際に、標準エラー出力に書き出された 1行目が、エラーメッセージとして使用される。

逆に言うと、ユーザスクリプトは、実行する各コマンドの標準エラー出力を放置してはならず、各コマンドの標準エラー出力は、適切な場所にリダイレクトするなどの対応をしないといけない。また、標準エラー出力には 1行を超えて書き出さない方がよい。エラーメッセージが正常に返せない場合がある。

エラーを返す場合のサンプル

perl で書いています。標準エラー出力にエラーメッセージを書き出し、終了コード 1 を返します。

Automator からエラーの発生が通知されます。

0 件のコメント:

コメントを投稿