在Applescript命令中使用双引号执行Shell脚本回显

时间:2013-02-06 19:43:07

标签: applescript echo quotes double-quotes

我正在尝试使用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 个答案:

答案 0 :(得分:3)

尝试:

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

答案 1 :(得分:1)

引号正确传递,只是shell不回显它们,因为它们是shell语法的一部分。

如果您尝试使用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字符串。

答案 2 :(得分:0)

对我来说,我的挑战是

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

所以我的解决方案是

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

你必须在第一次双引号之前逃脱,然后在它之前再次逃脱。感谢大家的提示!

答案 3 :(得分:0)

要调用此内部代码,请尝试此

set myStr to "/bin/echo Hello here is \\\"Quoted String\\\"

do脚本调用将使用双引号将其写入。

do script myStr in front window