2010年9月24日金曜日

“シェルスクリプトを実行” アクションの標準エラー出力

標準で入っている “シェルスクリプトを実行” アクションですが、標準エラー出力絡みでバグ(仕様?)があるようです。動かしているスクリプトが標準エラー出力に 16384バイトを超えて出力すると、アクションがストールします。

実験

“シェルスクリプトを実行” アクションのバージョンは 2.0.1 です。

perl で書いています。標準エラー出力に 16384文字の空白文字 (0x20) を出力してみます。最後に "OK" を返します。これは一瞬のうちに、正常に終了します。

次に、1文字増やして、標準エラー出力に 16385文字の空白文字を出力してみます。あとは一つ前のコードと同じですが、これは結果が返ってきません。

tcsh で同様のコードを動かしてみても、結果は同じです。

@ i = 1
while ($i <= 16385)
echo -n " " > /dev/stderr
@ i ++
end

echo "OK"

考察

標準エラー出力のバッファが溢れたときの処理がおかしいようです。

対策としては、“シェルスクリプトを実行” アクションで動かすシェルスクリプトでは、標準エラー出力には、文字を出さないようにするか、あらかじめ /dev/null などに接続しておく方がよさそうです。また、“AppleScript を実行” アクションから同じスクリプトを実行した場合は、特に問題なく動作しますので、少々面倒ですが、こちらを使うのも手です。

ちなみに、標準出力には、以下のように 10万くらい出してもへっちゃらでした。

0 件のコメント:

コメントを投稿