Если бы я хотел запустить AppleScript из скрипта bash, я мог бы вызвать файл со списком команд, которые мне нужно выполнить.
#!/bin/bash
{some commands}
osascript file.scpt
{other commands}
Что, однако, если бы я хотел запускать команды, которые нужно было запускать последовательно, из bash?
Примером может быть
#!/bin/bash
echo
echo This will open Google Chrome in Kiosk mode
osascript -e "tell application \"Google Chrome\""
osascript -e "activate"
osascript -e "tell application \"System Events\""
osascript -e "key down {command}"
osascript -e "key down {shift}"
osascript -e "keystroke \"f\""
osascript -e "key up {shift}"
osascript -e "key up {command}"
osascript -e "end tell"
echo "Google Chrome is now open in Kiosk Mode"
Я знаю, что это очень надуманный пример, но он помогает объяснить, что я пытаюсь сделать. Обычно все эти команды пишутся без соответствующих escape \
-символов повсюду и меньше "
вокруг каждой команды. Я бы также поместил их в .scpt
файл.
Решение, о котором я знаю, состоит в том, чтобы переписать сценарий, используя #!/usr/bin/osascript
вместо bash, и перейти оттуда, но я хочу иметь возможность смешивать. Я обнаружил, что могу проверить файл сценария, если он существует, чтобы создать его и добавить каждую команду, которая мне нужна, к этому файлу, а затем выполнить требуемый файл сценария из bash, но это также противоречит цели.
Невозможно, чтобы в середине файла я мог поменять используемую оболочку на shebang
строку, а затем поменять обратно после того, как я выполнил необходимые команды, не так ли?
Любое понимание будет более чем приветствоваться.
Аргумент for osascript -e
может содержать символы новой строки:
osascript -e 'set x to "a"
say x'
Вы также можете указать несколько -e
аргументов:
osascript -e 'set x to "a"' -e 'say x'
Или, если вы используете heredoc, bash
интерпретирует три символа ( \
, $
, и `
) между <<END
и , END
но не интерпретирует символы между <<'END'
и END
.
osascript <<'END'
set x to "a"
say x
END
Редактировать:
Так как osascript может работать с heredoc (т.е. принимать данные из /dev/stdin), то можно просто написать сценарий как целый файл и добавить перед ним правильную строку shebang:
#!/usr/bin/env osascript
set x to "a"
say x
Это также позволяет вам сохранить ваш сценарий Apple как реальную программу в ~/Applications/.app, используя следующую процедуру (изменив имя вашего сценария):
mkdir -p ~/Applications/<APP_NAME>.app/Contents/MacOS
touch ~/Applications/<APP_NAME>.app/Contents/MacOS/<APP_NAME>
open -A TextEdit ~/Applications/<APP_NAME>.app/Contents/MacOS/<APP_NAME>
Убедитесь, что и файл сценария в .../MacOS/, и
Вы можете обернуть необработанный AppleScript в <<EOD
... Последний EOD
, сигнализирующий об окончании ввода, должен стоять на первой позиции в строке.
(Кстати, ваш applescript, похоже, отсутствует end tell
после activate
....)
#!/bin/bash
osascript <<EOD
tell application "Google Chrome"
activate
end tell
tell application "System Events"
key down {command}
key down {shift}
keystroke "f"
key up {shift}
key up {command}
end tell
EOD
echo "Google Chrome is now open in Kiosk Mode"
Даниэль-Джеймс (Ж)
end tell
часть сценария.иконоборец
-e
пример HEREDOC?учуугака
-e statement Enter one line of a script. If -e is given, osascript will not look for a filename in the argument list. Multiple -e options may be given to build up a multi-line script. Because most scripts use characters that are special to many shell programs (for example, AppleScript uses single and double quote marks, ``('', ``)'', and ``*''), the statement will have to be correctly quoted and escaped to get it past the shell intact.
иконоборец
-e statement Enter one line of a script
есть подарок . _-e
Но помимо этого, рассматривается ли HEREDOC как отдельная строка?окодо
|
подключиться к команде, то вы можетеHEREDOC
и к ней, так как оба метода взаимодействуют с командой черезstdin
. Это также означает, что вы можете использовать команду как шебанг , например/usr/bin/osascript
. (Который также использует stdin для отправки ввода в процесс). Попробуйте пройтиecho "set Volume 2" | osascript
быстрый тест.