62 votos

Ejecutar AppleScript de un script de bash

Si quería ejecutar un AppleScript desde dentro de un script en bash que yo podría llamar un archivo con la lista de comandos que se requieren para ejecutar.

#!/bin/bash
{some commands}
osascript file.scpt
{other commands}

Lo que, sin embargo, si quería ejecutar los comandos que se necesitan para ser ejecutado en secuencia desde dentro de bash?

Un ejemplo sería

#!/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"

Sé que este es un muy descabellada ejemplo, pero sirve para explicar lo que estoy tratando de hacer. Normalmente, los comandos de todos los que se escribe sin sus respectivos escapar \ personajes y menos " alrededor de cada comando. También me gustaría tener dentro de un .scpt archivo.

Una solución que he conocido, es volver a escribir la secuencia de comandos utilizando #!/usr/bin/osascript en lugar de bash e ir de allí, pero quiero ser capaz de mezcla. He descubierto que puedo probar para un archivo de secuencia de comandos, si existe para crear uno y anexar cada comando necesito ese archivo y, a continuación, ejecute el archivo de secuencia de comandos necesarios desde dentro de bash, sino que también anula el propósito.

No hay manera de que a mitad de camino a través de un archivo, me pueden cambiar el shell se utiliza con el shebang línea y, a continuación, intercambio de vuelta después he ejecutado los comandos necesarios, ¿no?

Cualquier visión sería más que bienvenido.

66voto

Fuzzy Purple Monkey Puntos 702

El argumento de osascript -e puede contener saltos de línea:

osascript -e 'set x to "a"
say x'

También puede especificar varios -e argumentos:

osascript -e 'set x to "a"' -e 'say x'

O si utiliza un heredoc, bash interpreta tres personajes (\, $y `) entre <<END y END pero no los caracteres entre <<'END' y END.

osascript <<'END'
set x to "a"
say x
END

Editar:

Desde osascript puede operar con un heredoc (ie toma de entrada de /dev/stdin), entonces uno sólo puede escribir la secuencia de comandos como un archivo completo y anteponer con el correcto proceso de la línea:

#!/usr/bin/env osascript

set x to "a"
say x

Esto también le permite guardar el script de apple como un programa real en ~/Aplicaciones/.aplicación mediante el siguiente procedimiento para cambiar su nombre del script):

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>

Asegúrese de que tanto el archivo de secuencia de comandos en .../MacOS/ y los partidos

23voto

beroe Puntos 1605

Usted puede ajustar el raw de AppleScript en <<EOD... La última EOD que marcó el final de la entrada tiene que venir en la primera posición en la línea.

(Por CIERTO, su applescript que parecía ser la falta de una end tell después activate....)

#!/bin/bash
echo
echo "Google Chrome is now open in Kiosk Mode"
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"

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X