2013-02-06 442 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