4

Google が提案する

echo "input" | osascript filename.scpt

filename.scpt

set stdin to do shell script "cat"
display dialog stdin

ただし、空白のダイアログしか取得できませんでした。テキストはありません。バージョンで AppleScript から stdin を取得するにはどうすればよいですか?

私の OS バージョンは OSX 10.8 Mountain Lion です。

4

4 に答える 4

6

申し訳ありませんが、回答についてコメントするのに十分な評判ではありませんが、ここで指摘する価値のある重要なことがあると思います...

@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
于 2014-07-28T16:15:47.533 に答える
6

このスレッドによると、10.8 の時点で、AppleScript は積極的に標準入力を閉じています。未使用のファイル記述子にスライドさせることで、保存できます。これを bash で実行する例を次に示します。

ここでcat、magic からサブプロセスを読み取ることで、再び取り組みfdます。

$ echo world | osascript 3<&0 <<'APPLESCRIPT'
>   on run argv
>     set stdin to do shell script "cat 0<&3"
>     return "hello, " & stdin
>   end run
> APPLESCRIPT
hello, world
$
于 2013-09-11T04:39:16.050 に答える
4

「シェルスクリプト「cat」を実行するようにstdinを設定」が機能していたことを知っています。ただし、10.8で動作させることはできません。いつ動作を停止したのかわかりません。とにかく、基本的に、echo コマンドの出力を変数に取得して、osascript コマンドの引数として使用できるようにする必要があります。Applescript も引数を処理する必要があります (argv の実行時)。最後に、osascript を使用する場合は、アプリケーションに「ダイアログを表示する」ように指示する必要があります。そうしないと、エラーが発生します。

以上のことから、引数を処理する単純な AppleScript を次に示します。これを filename.scpt のコードにします。

on run argv
    repeat with i from 1 to count of argv
        tell application "Finder"
            activate
            display dialog (item i of argv)
        end tell
    end repeat
end run

実行するシェルコマンドは次のとおりです...

var=$(echo "sending some text to an applescript"); osascript ~/Desktop/filename.scpt "$var"

それが役立つことを願っています。幸運を。

于 2012-12-20T15:48:56.187 に答える
0

これには遅れましたが、元の AppleScript は osascript で許可されていないことをしようとしているようです。

元の filename.scpt の場合、この行:

display dialog stdin

次のように変更されます。

tell application "System Events" to display dialog stdin

次に、(コマンドライン引数ではなく) stdin を介して値を渡すことは、10.7.5 Lion で確実に機能し、おそらく 10.8 Mountain Lion でも機能します。

于 2013-02-14T19:28:46.470 に答える