2013-02-06 265 views
2

我正在尝试使用applescript来运行命令行进程。该AppleScript的的简化版本看起来像这样在Applescript命令中使用双引号执行Shell脚本Echo

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

与预期结果是

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

如果我只是运行在终端这个命令,我得到正确的输出。然而,与苹果笔我得到以下结果。请注意值周围缺少的双引号。

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

我在这里错过了什么?我需要围绕值的双引号,否则命令将无法正常运行。

感谢, 摩根

回答

3

尝试:

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

引号被正确地传递,这只是外壳不附和他们,因为他们是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" 

通过相互呼应的说法是正确的解析如果它被引用。 引号在开头和结尾,因为它是一个带有嵌入换行符的AppleScript字符串。

0

对我来说,我的挑战是

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

所以我的解决办法是

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

你有第一个双引号之前逃跑,然后再前它。感谢您提示每个人!

0

要调用这里面的代码,试试这个

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

的做脚本调用将它与双引号(S)写。

do script myStr in front window