osascript / синтаксическая ошибка: ожидаемый конец строки, но найдено имя команды. (-2741) - PullRequest
13 голосов
/ 06 августа 2011

У меня проблемы с сценарием оболочки, который использует небольшую часть Applescript. Когда я компилирую его в редакторе Applescript, он работает. Это не так, хотя в сценарии оболочки.

44: 49: синтаксическая ошибка: ожидаемый конец строки, но найдено имя команды. (-2741) 23:28: синтаксическая ошибка: ожидаемый конец строки, но найденный «после». (-2741)

Вот код оболочки:

osascript -e 'tell application "System Events" -e 'activate'

osascript -e 'tell process "Application 10.5" -e 'set frontmost to true' -e 'end tell'

osascript -e 'delay 1' -e 'keystroke return' -e 'delay 1' -e 'keystroke return'

end tell

Applescript (это работает):

tell application "System Events"
activate
tell process "Application 10.5"
    set frontmost to true
end tell

delay 1
keystroke return
delay 1
keystroke return

end tell

[обновлено] / [решено]

Это решило любые проблемы, которые у меня возникали при попытке изменить appleScript для работы внутри сценария оболочки:

## shell script code

echo "shell script code"
echo "shell script code"

## applescript code

osascript <<EOF
tell application "Scriptable Text Editor"
    make new window
    activate
    set contents of window 1 to "Hello World!" & return
end tell
EOF

## resume shell script...

Очень здорово, что вы можете поместить чистый яблочный скрипт прямо в скрипт оболочки. ; -)

Ответы [ 2 ]

5 голосов
/ 05 апреля 2013

Каждая команда osascript (1) - это совершенно отдельный процесс и, следовательно, совершенно отдельный сценарий, поэтому вы не можете использовать состояние (например, переменные) между ними. Вы можете создать многострочный скрипт в osascript, используя несколько опций -e - все они соединяются с разрывами строк между ними для формирования скрипта. Для достаточно длинного сценария хороший путь - отдельный файл или «документ здесь», который вы использовали в своем возможном решении.

Кроме того, если ваш сценарий в основном (или полностью!) AppleScript, вы можете создать сценарий «оболочки», который будет просто AppleScript, используя файл shebang, который вызывает osascript:

#!/usr/bin/osascript
display dialog "hello world"

... и затем используйте do shell script при необходимости.

2 голосов
/ 06 августа 2011

Вместо использования флага -e вы можете просто сохранить код appleScript в небольшом текстовом файле и вызвать

osascript /path/to/script

Кроме того, если вы указываете приложению или процессу сделать только одну вещь, вы можете написать это так:

tell process "MyProcess" to perform action.

Теперь, когда я думаю об этом, запуск каждой строки отдельно с флагом -e, вероятно, не будет работать, потому что я не думаю, что все строки будут соединяться и запускаться как одна программа. Например, я только что протестировал использование osascript -e для установки переменной. Затем я использовал отдельный osascript -e для чтения переменной, но он не смог.

[*]

...