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

引号被正确传递,只是 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 字符串。

于 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 回答
0

要调用这个内部代码,试试这个

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

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

do script myStr in front window

于 2017-07-24T22:51:31.683 回答