申し訳ありませんが、回答についてコメントするのに十分な評判ではありませんが、ここで指摘する価値のある重要なことがあると思います...
@regulus6633 の回答の解決策は、データをパイプすることと同じではありませんosascript
。パイプの内容全体 (この場合はecho
出力) を変数に詰め込み、それをコマンドライン引数として osascript に渡すだけです。
このソリューションは、パイプの内容によっては期待どおりに機能しない場合があります (シェルも役割を果たしている可能性があります)...たとえば、そこに null ( \0
) 文字がある場合:
$ var=$(echo -en 'ABC\0DEF')
var
文字で区切られた文字列「ABC」と「DEF」が含まれていると思うかもしれませんnull
が、そうではありません。null 文字はなくなりました。
$ echo -n "$var" | wc -c
6
ただし、@phs の回答(真のパイプ) を使用すると、ゼロが得られます。
$ echo -en 'ABC\0DEF' | osascript 3<&0 <<EOF
> on run argv
> return length of (do shell script "cat 0<&3")
> end run
>EOF
7
しかし、それはゼロを使用しているだけです。osascript
コマンドライン引数としてランダムなバイナリ データを渡してみてください。
$ var=$(head -c8 /dev/random)
$ osascript - "$var" <<EOF
> on run argv
> return length of (item 1 of argv)
> end run
>EOF
execution error: Can’t make some data into the expected type. (-1700)
繰り返しますが、@phs の回答はこの罰金を処理します。
$ head -c8 /dev/random | osascript 3<&0 <<EOF
> on run argv
> return length of (do shell script "cat 0<&3")
> end run
>EOF
8