3

コマンドラインプロセスを実行するためにapplescriptを使用しようとしています。Applescript の簡易バージョンは次のようになります。

do shell script "echo bwfmetaedit --INAM=\"name\" --IART=\"artist\" --ICRD=\"date\" /desktop/filepath.wav"

期待される結果は

bwfmetaedit --INAM="name" --IART="artist" --ICRD="date" /desktop/filepath.wav

そのコマンドをターミナルで実行すると、正しい出力が得られます。ただし、applescript を使用すると、次の結果が得られます。値を二重引用符で囲んでいないことに注意してください。

"bwfmetaedit --INAM=name --IART=artist --ICRD=date /desktop/filepath.wav"

ここで何が欠けていますか?値を二重引用符で囲む必要があります。そうしないと、コマンドが正しく実行されません。

ありがとう、モーガン

4

4 に答える 4

3

試す:

do shell script "echo bwfmetaedit --INAM=\\\"name\\\" --IART=\\\"artist\\\" --ICRD=\\\"date\\\" /desktop/filepath.wav"
于 2013-02-06T20:12:13.317 に答える
1

引用符は適切に渡されています。シェル構文の一部であるため、シェルがそれらをエコーし​​ないだけです。

各引数をそれぞれの行に出力するこの AppleScript を試してみると:

do shell script "sh -c 'for F in \"${@}\"; do echo \"${F}\"; done' \"${0}\" echo bwfmetaedit --INAM=\"name with spaces\" --IART=\"artist with spaces\" --ICRD=\"date with spaces\" /desktop/filepath.wav"

次に、出力が次のようになることがわかります。

"echo
bwfmetaedit
--INAM=name with spaces
--IART=artist with spaces
--ICRD=date with spaces
/desktop/filepath.wav"

echo に渡された各引数は、引用されているかのように適切に解析されます。改行が埋め込まれた AppleScript 文字列であるため、引用符は先頭と末尾にあります。

于 2013-02-06T19:56:24.367 に答える
0

私にとって私の課題は

osascript -e 'tell application "Simulator" to quit'

だから私の解決策は

do shell script osascript -e 'tell application \"Simulator\" to quit'"

最初の二重引用符の前でエスケープし、次にその前でエスケープする必要があります。皆さん、ヒントをありがとう!

于 2017-01-25T22:55:58.563 に答える