¿Cómo hacer que un archivo AppleScript existente funcione como un servicio?

11

Hice un AppleScript, lo guardé como un archivo en una carpeta específica en mi disco duro. Ahora quiero asignarle un acceso directo y parece que tengo que hacer un Servicio a través de Automator, pero Run AppleScriptme pide que coloque el código dentro, mientras quiero ejecutar el archivo .scpt ya existente. ¿Como hacer eso?

Nakilon
fuente

Respuestas:

9

Sí, Automator es la mejor opción aquí. Para crear el servicio, siga estos pasos:

  1. Abra Automator y seleccione Servicio:

    ingrese la descripción de la imagen aquí

  2. Busque 'applescript' y arrastre la acción al panel derecho:

    ingrese la descripción de la imagen aquí

  3. Cambie Service receives selected texta Service receives no inputpara que siempre aparezca en el menú Servicios:

    ingrese la descripción de la imagen aquí

  4. Reemplazar (* Your script goes here *)con:

    do shell script "/usr/bin/osascript /path/to/your/script.scpt"

    si desea ejecutar su .scptarchivo existente . Tenga en cuenta que osascript no puede manejar la interacción del usuario como mostrar una ventana de diálogo:

    ingrese la descripción de la imagen aquí

    Para superar esta limitación, use esta solución alternativa o simplemente reemplácela (* Your script goes here *)con el contenido de su script.

  5. Guárdalo:

    ingrese la descripción de la imagen aquí

  6. Si lo desea, puede asignar un acceso directo a su nuevo servicio. Seleccione Servicios> Preferencias de servicios en Finder (o cualquier aplicación abierta):

    ingrese la descripción de la imagen aquí

  7. Asigne un shorcut no tan común:

    ingrese la descripción de la imagen aquí

  8. Ahora puede acceder a su servicio desde cualquier aplicación a través del acceso directo que asignó en el paso anterior:

    ingrese la descripción de la imagen aquí

Si alguna vez desea deshacerse del servicio abierto ~/Library/Services, elimínelo y vacíe la papelera:

ingrese la descripción de la imagen aquí

jaume
fuente
Dije que quiero ejecutar el archivo de script existente, no volver a escribirlo en Automator.
Nakilon
Pensé que copiar / pegar estaría bien, pero sí, tienes razón, está claramente indicado en tu pregunta. Uso osascript, como se explica en otras respuestas.
jaume
@Nakilon He agregado cómo usar osascripten Automator para ejecutar su .scptarchivo, una limitación y dos soluciones.
jaume
Acabo de hacer esto. Funcionó; pero ahora tarda de 4 a 5 segundos en iniciar el script. (Cuando el código se guardó directamente en el flujo de trabajo, se lanzó casi de inmediato). ¿Alguna idea de qué causa esto o cómo hacer que se inicie más rápido?
Zack
1
@Zack Gracias, no sé por qué osascriptnecesita 4 segundos adicionales para ejecutar su script, pero Automator no es la causa de la demora, lo cual fue mi preocupación. Es posible que desee depurar osascript, consulte opensourcehacker.com/2011/12/02/… y stackoverflow.com/questions/31045575/…
jaume
4

En el script, agregue un on runargumento:

on run
    -- do whatever the script does
end run

Luego puede usar la acción "Ejecutar script de shell" de Automator con el osascriptcomando:

osascript /path/to/script.scpt

osascriptes un comando que ejecuta AppleScript en el shell. Necesita las líneas en el script para permitir que el script se ejecute fuera del editor AppleScript.

alexwlchan
fuente
1
No necesita incluir un controlador de ejecución explícito. Todos los scripts tienen un controlador de ejecución implícito. La razón por la cual la acción Ejecutar AppleScript de Automator incluye un controlador de ejecución explícito podría deberse a que Automator utiliza el on run {input, arguments}formulario especial , pero incluso en Automator puede eliminar el controlador de ejecución.
Lri
1
@ ͏͏͏ Me pregunto si este ping te afecta. Felicitaciones por la selección del nombre creativo.
bmike
3

Quizás desee echar un vistazo a este servicio , que le permite "crear servicios de Mac OS X a partir de cualquier script".

Peter
fuente
1
¿Puede proporcionar una respuesta aquí en lugar de solo un enlace
User151019
2

No recomendaría crear servicios de Automator para asignar accesos directos a los scripts. Hay un error en 10.7 y 10.8 donde los métodos abreviados de teclado para los servicios de Automator no siempre funcionan hasta que pasa el cursor sobre el menú de servicios desde la barra de menú. También hay un retraso relativamente largo (quizás de 0.1 a 1 s) antes de que se ejecuten los servicios.

Consulte esta respuesta para conocer otras formas de asignar métodos abreviados de teclado a los scripts. Yo uso FastScripts y Alfred yo mismo.

Lri
fuente
Nunca he experimentado esta necesidad de flotar? ¿Tiene más detalles de lo que está hablando
Markhunte
1
No estoy seguro de si afecta a todas las instalaciones de OS X o todos los servicios, pero me he encontrado con él varias veces en diferentes instalaciones, y ha sido mencionado por otras personas aquí y en Super User. Ocasionalmente, los métodos abreviados de teclado para todos los servicios de Automator dejan de funcionar (o no sucede nada si los presiona), pero comienzan a funcionar nuevamente si coloca el cursor sobre el menú de servicios desde la barra de menú, o si, por ejemplo, selecciona un servicio con el mouse.
Lri
2

Puede EJECUTAR el script existente con un simple servicio de automatización como este. Y asigne su atajo desde dentro de los atajos del teclado de la forma habitual. Solo recuerde que algunas aplicaciones pueden necesitar ser relanzadas antes de que tomen los atajos.

ejemplo.

guión sayHello:

say "hello"

Servicio de automatización: ingrese la descripción de la imagen aquí

Que en este ejemplo usa:

  • Sin entrada
  • Cualquier aplicación

La acción es un script de ejecución de shell. El código solo usa el osascript del comando de Unix y la ruta al archivo. La entrada de paso puede ser stdn o argumento

No es necesario hacer nada especial al guión.

Para obtener más detalles sobre el comando osascript, consulte las páginas del manual . La página del manual da otro ejemplo en el que puede pasar argumentos al script.

Markhunte
fuente
0

Para desarrollar un Servicio, necesita algún tipo de software que cree un Servicio como uno de los siguientes:

  1. Automator para crear un flujo de trabajo.
  2. Este servicio para crear un servicio.
  3. Xcode para crear un .app

Todos los tipos de servicios anteriores son paquetes. Todas son carpetas que contienen un plist que especifica los atributos de un Servicio.

Así es como creé un Servicio usando Automator que usa una acción "Ejecutar AppleScript" Automator para llamar a un .script existente.

Servicio de Automator que llama a un AppleScript existente

Kaydell
fuente