我正在尝试使用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"
我在这里缺少什么?我需要围绕值的双引号,否则命令将无法正常运行。
谢谢, 摩根
答案 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