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

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?

Respuestas (6)

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, utilice esta solución alternativa o simplemente reemplácela (* Your script goes here *)con el contenido de su secuencia de comandos.

  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 atajo no tan común:

    ingrese la descripción de la imagen aquí

  8. Ahora su servicio es accesible 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, elimine el servicio y vacíe la papelera:

ingrese la descripción de la imagen aquí

Dije que quiero ejecutar el archivo de script existente, no volver a escribirlo en Automator.
Pensé que copiar/pegar estaría bien, pero sí, tienes razón, se indica claramente en tu pregunta. Use osascript, como se explica en otras respuestas.
@Nakilon He agregado cómo usar osascripten Automator para ejecutar su .scptarchivo, una limitación y dos soluciones.
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 Cuando se ejecuta /usr/bin/osascript /path/to/your/script.scpten una ventana de Terminal, ¿el script también necesita de 4 a 5 segundos para iniciarse?
No estoy seguro. Ese script en particular requiere un mensaje de correo electrónico seleccionado. No estoy seguro de cómo falsificar eso desde la línea de comando.
@Zack Inicie Terminal y escriba sleep 10 && /usr/bin/osascript /path/to/your/script.scpt. Esto le da 10 segundos para cambiar a Correo y seleccionar el mensaje antes de que se ejecute el script. ¿Podrías probarlo e informarnos?
Sí. Si selecciono un mensaje de correo y luego ejecuto el script desde la línea de comandos, tarda 6 segundos antes de que aparezca el cuadro de diálogo. Cuando el código se guarda directamente en el script de Automator, el cuadro de diálogo aparece menos de 2 segundos después de seleccionar el script en el menú de servicios.
@Zack Gracias, no sé por qué osascriptnecesita 4 segundos adicionales para ejecutar su secuencia de comandos, pero Automator no es la causa del retraso, que era mi preocupación. Es posible que desee depurar osascript, consulte opensourcehacker.com/2011/12/02/… y stackoverflow.com/questions/31045575/…

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.

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 que la acción Ejecutar AppleScript de Automator incluye un controlador de ejecución explícito podría deberse a que Automator usa el on run {input, arguments}formulario especial, pero incluso en Automator puede simplemente eliminar el controlador de ejecución.
@͏͏͏ Me pregunto si este ping te afecta. Felicitaciones por la selección creativa del nombre.

Tal vez desee echar un vistazo a This Service , que le permite "crear servicios de Mac OS X desde cualquier secuencia de comandos".

¿Puede proporcionar una respuesta aquí en lugar de solo un enlace?

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 pasas 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.

Nunca he experimentado esta necesidad de flotar? tienes mas detalles de lo que hablas
No estoy seguro de si afecta a todas las instalaciones de OS X oa todos los servicios, pero lo he encontrado varias veces en diferentes instalaciones, y otras personas lo han mencionado aquí y en Super User. Ocasionalmente, los atajos de teclado para todos los servicios de Automator dejan de funcionar (o no sucede nada si los presiona), pero comienzan a funcionar nuevamente si pasa el mouse sobre el menú de servicios desde la barra de menú, o si, por ejemplo, selecciona un servicio con el mouse.

Puede EJECUTAR el script existente con un servicio de automatización simple como este. Y asigne su atajo desde dentro de los atajos de teclado como de costumbre. Solo recuerde que es posible que deba reiniciar algunas aplicaciones antes de que seleccionen los accesos directos.

ejemplo.

Di hola script:

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 Run Shell . El código solo usa el comando Unix osascript y la ruta al archivo. La entrada de pase puede ser a stdn o a argumento

Eso es todo, no se necesita hacer nada especial con el guión.

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

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

  1. Automator para crear un .workflow
  2. ThisService para crear un .servicio
  3. Xcode para crear una .app

Todos los tipos de servicios anteriores son paquetes. Son todas 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 de Automator "Ejecutar AppleScript" para llamar a un .script existente.

Servicio de Automator que llama a un AppleScript existente