Osascript/синтаксическая ошибка: ожидаемый конец строки, но найденное имя команды. (-2741)
У меня возникают проблемы с оболочкой script, которая использует небольшую часть Applescript. Когда я скомпилирую его с редактором Applescript, он работает. Это не происходит, хотя внутри оболочки script.
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 для работы в оболочке script:
## 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...
Очень круто, что вы можете прямо нанести чистый applescript в оболочку script.; -)
Ответы
Ответ 1
Каждая команда osascript
(1) представляет собой полностью отдельный процесс и, следовательно, полностью отдельный script, поэтому вы не можете использовать состояние (например, переменные) между ними. Вы можете построить многострочный script в osascript
с помощью нескольких опций -e
- все они объединяются с разрывами строк между ними, чтобы сформировать script. Для достаточно длинного script отдельный файл или "здесь документ", как вы использовали в своем конечном решении, является хорошим способом.
Кроме того, если ваш script в основном (или полностью!) AppleScript, вы можете сделать "оболочку" script, которая просто является AppleScript, используя файл shebang, который вызывает osascript
:
#!/usr/bin/osascript
display dialog "hello world"
... и затем при необходимости используйте do shell script
.
Ответ 2
Вместо того, чтобы использовать флаг -e, вы можете просто сохранить ваш код applescript в небольшом текстовом файле и вызвать
osascript /path/to/script
Кроме того, если вы сообщаете приложению или процессу только одно, вы можете написать его следующим образом:
tell process "MyProcess" to perform action.
Теперь, когда я думаю об этом, запуск каждой строки отдельно с флагом -e, вероятно, не будет работать, потому что я не думаю, что все линии будут соединяться и запускаться как одна программа. Например, я просто проверил использование osascript -e для установки переменной. Затем я использовал отдельный osascript -e для чтения переменной, и это не могло.
[ *]