2013-07-18 3 views
0

У меня есть эта функция bash, которая запускает некоторый Applescript. Если я запускаю часть AppleScript в AppleScript Editor или в Textmate, он отлично работает, но в командной строке, функция завершается с ошибкой ...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) 

I знаю (думаю), что проблема с первой Баш управляющей последовательности на этой линии:

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

Но я не знаю, почему она не ... Любые идеи о том, почему это не работает, пожалуйста?

EDIT 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 не поддерживает '…' для строкового литерала. Вы должны использовать "…" и избежать внутренней пары "…" с \.

Кроме того, это выглядит как скорлупа уменьшить обратной косой черты в последовательности heredocs (!!!), поэтому вам нужно добавить слэшами на существующих обратной косой черты:

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

Я попробовал ваш так не удалось с другим сообщением об ошибке ... Пожалуйста, см. мое редактирование. –

+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 "}'). –

Смежные вопросы