2013-07-18 79 views
0

我有這個運行一些Applescript的bash函數。如果我運行的AppleScript的編輯器或TextMate中的AppleScript的一部分,它工作正常,但在命令行上,則操作失敗...Applescript + Bash:腳本在Applescript編輯器中工作,但不使用osascript

wtf() { 
    osascript - <<EOF 
    tell application "iTerm" 
     tell current terminal 
      launch session "Railscasts" 
      tell the last session 
       write text 'echo -ne "\\e]1;$account\\a"' 
      end tell 
     end tell 
    end tell 
EOF 
} 

和錯誤是:

190:191: syntax error: Expected expression but found unknown token. (-2741) 

我知道(認爲)這個問題是在這條線的第一bash的轉義序列:

write text 'echo -ne "\\e]1;$account\\a"' 
        ^

但我不知道它爲什麼失敗?爲什麼這不工作,請任何想法?

編輯1:我也試過這和它的失敗:

wtf() { 
    osascript - <<EOF 
    tell application "iTerm" 
     tell current terminal 
      launch session "Railscasts" 
      tell the last session 
       write text "echo -ne \\\"\\e]1;$account\\a\\\"" 
      end tell 
     end tell 
    end tell 
EOF 
} 

錯誤消息:

163:164: syntax error: Expected end of line but found unknown token. (-2741) 

回答

3

的AppleScript不支持'…'爲一個字符串。您必須使用"…",並用\轉義內部對"…"

此外,它看起來像炮彈減少here文檔反斜槓序列(!),所以你需要添加在現有的反斜槓反斜槓更多:

"echo -ne \"\\\\e]1;$account\\\\a\"" 
+0

我想你這麼lution,它失敗了一個不同的錯誤信息...請參閱我的編輯。 –

+0

我想''echo -ne \「\\ e] 1; $ account \\ a \」「'是你想要的。 – chepner

+0

@chepner我也試過了,但我又遇到了另外一個錯誤:'163:164:語法錯誤:期望的「」「但是找到未知的標記(-2741)' –

1

你也可以用<<EOF替換<<'EOF'

<<'END' 
\$` are not interpreted 
END 

<<END 
\$` are interpreted 
END 

或者只是使用單引號:

osascript -e 'tell application "iTerm" 
    -- 
end tell' 

X=999 osascript -e 'on run argv 
    item 1 of argv + system attribute "X" 
end run' 888 
+0

第二個例子末尾的'888'有什麼意義? –

+0

我只是使用888和999作爲示例,說明如何通過添加顯式運行處理程序或使用環境變量將值傳遞給腳本 – user495470

+0

哦,我明白了,當腳本運行時,'argv'將是'{888}'(或也許是'{「888」}')。 –

相關問題