標準で入っている “シェルスクリプトを実行” アクションですが、標準エラー出力絡みでバグ(仕様?)があるようです。動かしているスクリプトが標準エラー出力に 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 件のコメント:
コメントを投稿