¿Ejecutar scripts de Shell desde el Dock de OS X?

160

¿Cómo configuro un script de shell para ejecutar desde el dock de Mac OSX? Parece que simplemente crear un acceso directo abrirá el archivo en mi editor. ¿Hay una bandera que necesito establecer en algún lugar para decirle que se ejecute en lugar de abrirla para editarla?

Wilco
fuente
2
debería hacer +1 únicamente para el avatar, aunque también me gusta el tema.
Matt Bannert
Es posible que desee considerar cambiar las respuestas aceptadas a la segunda @Wilco. Creo que es una mejor respuesta.
Gray

Respuestas:

190

Puede crear un flujo de trabajo de Automator con un solo paso: "Ejecutar script de Shell"

Luego File > Save As, y cambie el Formato de archivo a "Aplicación". Cuando abra la aplicación, ejecutará el paso Shell Script, ejecutando el comando y saliendo después de que se complete.

El beneficio de esto es que es realmente simple de hacer, y puede obtener fácilmente la entrada del usuario (por ejemplo, seleccionando un grupo de archivos), luego pasarla a la entrada del script de shell (ya sea stdin o como argumentos).

(¡Automator está en tu /Applicationscarpeta!)

Ejemplo de flujo de trabajo

dbr
fuente
66
@dbr, botón de interfaz gráfica de usuario! :) Es broma, ¡es una buena sugerencia!
willasaywhat
Sí, fue una excelente sugerencia :) Incluso he escrito acciones de Automator para algunas de mis aplicaciones y todavía lo olvido en momentos como este :)
Jason Coco
No puedo hacer que esto funcione con nohup, a la "nohup / usr / bin / myscript &; disown -a && exit 0". Necesito la aplicación / flujo de trabajo para ejecutar un script y salir de inmediato. ¿Algunas ideas? :-)
regreso el
3
@martineau Si abre la aplicación haciendo open -a SomeAppThing.app --args --etc=2esto, debería enfocarse. Alternativamente, puede enfocarlo usando Applescript (por ejemplo osascript -e 'tell application "Google Chrome" to activate')
dbr
1
Nota: si su script está iniciando una aplicación GUI que permanecerá abierta por un tiempo, esto mostrará un ícono de engranaje que gira constantemente en la barra de tareas hasta que se cierre la aplicación. Una solución alternativa es agregar `&> / dev / null &` a la línea de inicio del script para que Automator no espere.
ewall
50

Si no necesita una ventana de Terminal, puede convertir cualquier archivo ejecutable en una Aplicación simplemente creando un script de shell Exampley moviéndolo al nombre del archivo Example.app/Contents/MacOS/Example. Puede colocar esta nueva aplicación en su base como cualquier otra, y ejecutarla con un clic.

NOTA: el nombre de la aplicación debe coincidir exactamente con el nombre del script. Por lo tanto, el directorio de nivel superior debe ser Example.appy el script en el Contents/MacOSsubdirectorio debe llamarseExample , y el script debe ser ejecutable.

Si necesita que se muestre la ventana de terminal, no tengo una solución simple. Probablemente podría hacer algo con Applescript, pero eso no está muy limpio.

Jeremy Banks
fuente
1
¿No sabes si hay una manera fácil de pasar los archivos como argumentos al script de shell? Para archivos abiertos usando "abrir con ...".
Fuzzy76
9
Para cualquiera que intente hacer esto, el nombre de la aplicación debe coincidir exactamente con el nombre del script. Así que realmente tiene que ser example.sh.app, no solo example.app. Recibirá una advertencia sobre la aplicación dañada si no coinciden
Kip
1
Para aclarar, soy un novato de OSX, ¿quiere decir simplemente crear una estructura de carpetas como la que se muestra en su ejemplo con el archivo de script colocado como se muestra?
Martineau
2
@martineau Sí, eso es correcto. Si crea una carpeta cuyo nombre termina en .appy con esa estructura, se tratará como una Aplicación ejecutable. Si desea ver el contenido de esa carpeta en el Finder, deberá hacer clic derecho sobre él y seleccionar "ver contenido del paquete" (porque al hacer doble clic en él se ejecutará la aplicación). En la Terminal, solo parecerá ser una carpeta. (No estoy seguro de si Finder le permitirá cambiar el nombre de la carpeta a .app por sí mismo; es posible que deba cambiar el nombre en la Terminal).
Jeremy Banks
1
Acabo de intentar esto y recibí un error en El Capitán (10.11) de: "No se puede abrir ... porque las aplicaciones powerpc ya no son compatibles". : D ¡Eso es bastante interesante!
AllenH
26

En OSX Mavericks:

  1. Crea tu script de shell.
  2. Haga que su script de shell sea ejecutable:

    chmod +x your-shell-script.sh
  3. Cambie el nombre de su script para que tenga un .appsufijo:

    mv your-shell-script.sh your-shell-script.app
  4. Arrastre el script a la base OSX.
  5. Cambie el nombre de su script a un .shsufijo:

    mv your-shell-script.app your-shell-script.sh
  6. Haga clic derecho en el archivo en Finder y haga clic en la opción "Obtener información".
  7. En la parte inferior de la ventana, configure el script de shell para que se abra con el terminal.

Ahora, cuando haga clic en el script en el dock, aparecerá una ventana de terminal y ejecutará su script.

Bonificación: para que el terminal se cierre cuando su script se haya completado, agréguelo exit 0al final y cambie la configuración del terminal para "cerrar el shell si se salió limpiamente", como se dice en esta respuesta SO .

stiemannkj1
fuente
Bien, esto funcionó para mí, cualquier forma de arriesgar el ícono me pregunto. FYI: También el paso 7 se refiere al archivo y no al elemento del menú ...
Mike Q
el camino agradable! solo todos .sh con terminal abierta.
iHTCboy
@ stiemannkj1, ¿Muestra esto el ícono mientras se ejecuta la aplicación? ¿Hay alguna forma de ocultarlo?
Pacerier
@Pacerier, lo siento, ya no estoy en OSX (cambiado a Linux :)). Es posible que desee probar la respuesta de Jeremy Bank . No tienen alguna otra idea y ya que no tengo OSX, no puedo prueba o meterse con nada para tratar de mostrar / ocultar el icono ..
stiemannkj1
17

Sé que esto es viejo, pero en caso de que sea útil para otros:

Si necesita ejecutar un script y desea que aparezca el terminal para que pueda ver los resultados, puede hacer lo que dijo Abyss Knight y cambiar la extensión a .command. Si hace doble clic en él, se abrirá una ventana de terminal y se ejecutará.

Sin embargo, necesitaba que esto se ejecutara desde el automatizador o appleScript. Entonces, para que esto abra una nueva terminal, el comando que ejecuté desde "ejecutar shell script" fue "abrir myShellScript.command" y se abrió en una nueva terminal.

Jason Tholstrup
fuente
maravilloso, gracias! Ahora todos deben querer que sea una solución perfecta, sería una forma de cerrar la ventana de terminal cuando se complete el script.
Peter M
1
bueno, si tiene seleccionada la ventana Cerrar al salir en las preferencias del terminal, puede agregar el comando de salida a su script y obtendrá lo que desea.
Jason Tholstrup
7

Mientras su script sea ejecutable y no tenga ninguna extensión, puede arrastrarlo tal cual está al lado derecho (lado del documento) del Dock y se ejecutará en una ventana de terminal cuando se haga clic en lugar de abrir un editor.

Si desea tener una extensión (como foo.sh), puede ir a la ventana de información de archivo en Finder y cambiar la aplicación predeterminada para ese script en particular de lo que sea (TextEdit, TextMate, cualquier valor predeterminado que esté configurado en su computadora para .sh) a la Terminal. Luego se ejecutará en lugar de abrirse en un editor de texto. Nuevamente, deberá arrastrarlo hacia el lado derecho del Dock.

Jason Coco
fuente
1
NOTA : Esto funciona como un campeón en OS X 10.10 Yosemite. No puedo comentar sobre 10.9
Bryan Ash
1
Funciona en 10.11. ¡Gracias!
Yassine Imounachen
Funciona en 10.12 también! Quizás mi comentario sobre 10.9 era incorrecto, pero noté que debe asegurarse de arrastrarlo a la parte del muelle debajo del separador. Lamentablemente, no tengo forma de volver a probar 10.9.
stiemannkj1
No es necesario agregarlo al Dock. Se puede ejecutar desde el escritorio. Pero no puede haber extensión. Hazlo ejecutable y solo puedes hacer doble clic. Esta es la opción más simple que he visto.
Rich Apodaca
5

Creo que este hilo puede ser útil: http://forums.macosxhints.com/archive/index.php/t-70973.html

Parafraseando, puede cambiarle el nombre con la extensión .command o crear un AppleScript para ejecutar el shell.

willasaywhat
fuente
Al menos en Snow Leopard, agregar una extensión .command a un script hace que se ejecute en el terminal si hace doble clic en él, pero por alguna razón aún no puede arrastrarlo al dock. Sin embargo, las sugerencias de dbr y Jeremy funcionaron para mí.
Jo Liss
5

Como Joe mencionó, crear el script de shell y luego crear un script de applecript para llamar al script de shell, logrará esto, y es bastante útil.

Shell Script

  1. Cree su script de shell en su editor de texto favorito, por ejemplo:

    mono "/Volumes/Media/~Users/me/Software/keepass/keepass.exe"

    (esto ejecuta el ejecutable w32, usando el marco mono)

  2. Guardar script de shell, por ejemplo, "StartKeepass.sh"

Apple Script

  1. Abra el Editor AppleScript y llame al script de shell

    do shell script "sh /Volumes/Media/~Users/me/Software/StartKeepass.sh" user name "<enter username here>" password "<Enter password here>" with administrator privileges

    • do shell script - comando applecript para llamar a comandos de shell externos
    • "sh ...." - este es su script de shell (ruta completa) creado en el paso uno (también puede ejecutar comandos directos, podría omitir el script de shell y simplemente ejecutar mi comando mono aquí)
    • user name - declara a AppleScript que desea ejecutar el comando como un usuario específico
    • "<enter username here> - reemplace con su nombre de usuario (manteniendo comillas) ex "josh"
    • password - declara a AppleScript su contraseña
    • "<enter password here>" - reemplace con su contraseña (manteniendo comillas) ex "mypass"
    • with administrative privileges - declara que quieres correr como administrador

Crea tu .APP

  1. guarde su applecript como filename.scpt, en mi caso RunKeepass.scpt

  2. guardar como ... su applecript y cambiar el formato de archivo a la aplicación, resultando en RunKeepass.app en mi caso

  3. Copie el archivo de su aplicación a su carpeta de aplicaciones

CJoshDoll
fuente
5

En el Editor de secuencias de comandos:

do shell script "/full/path/to/your/script -with 'all desired args'"

Guardar como un paquete de aplicaciones.

Mientras todo lo que quieras hacer sea obtener el efecto del script, esto funcionará bien. No verá STDOUT o STDERR.

Joe McMahon
fuente
2
Sugeriría: "Guardar como paquete de aplicación". Los paquetes se inician mucho más rápido que las aplicaciones.
e.James
-3

Alguien escribió ...

Acabo de configurar todos los archivos que terminan en ".sh" para abrir con Terminal. Funciona bien y no tiene que cambiar el nombre de cada script de shell que desea ejecutar.

Jonny
fuente