Подтвердить что ты не робот

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.; -)

4b9b3361

Ответ 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 для чтения переменной, и это не могло.

[ *]