Se eu quisesse executar um AppleScript a partir de um script bash, poderia chamar um arquivo com a lista de comandos que preciso executar.
#!/bin/bash
{some commands}
osascript file.scpt
{other commands}
O que, no entanto, se eu quisesse executar comandos que precisassem ser executados em sequência a partir do bash?
Um exemplo seria
#!/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"
Sei que este é um exemplo muito distante, mas funciona para explicar o que estou tentando fazer. Normalmente, esses comandos seriam todos escritos sem os respectivos \
caracteres de escape em todo o lugar e menos em "
torno de cada comando. Eu também os teria dentro de um .scpt
arquivo.
Uma solução que eu conheço é reescrever o script usando em #!/usr/bin/osascript
vez do bash e partir daí, mas eu quero poder misturar. Descobri que posso testar um arquivo de script, se ele existir para criar um e anexar cada comando necessário ao arquivo e, em seguida, executar o arquivo de script necessário a partir do bash, mas isso também anula o objetivo.
Não há como, no meio de um arquivo, eu possa trocar o shell que está sendo usado com a shebang
linha e depois voltar depois de executar os comandos necessários, existe?
Qualquer insight seria mais que bem-vindo.
fonte
end tell
do roteiro.-e
exemplo 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
não é um-e
presente. Mas, além disso, um HEREDOC é tratado como se fosse uma única linha?Você pode agrupar o AppleScript bruto em
<<EOD
... A últimaEOD
sinalização para o final da entrada deve ocorrer na primeira posição da linha.(BTW, seu AppleScript parecia estar faltando um
end tell
depoisactivate
....)fonte