2008-11-11 14 views
130

¿Cómo configuro un script de shell para ejecutar desde la base Mac OSX? Parece que simplemente crear un acceso directo abrirá el archivo en mi editor. ¿Hay alguna bandera que deba establecer en algún lugar para indicarle que se ejecute en lugar de abrirla para su edición?¿Ejecutar scripts de shell desde el Dock OS X?

+2

debería hacer +1 solo para el avatar, aunque también me gusta el tema. –

Respuesta

159

Se puede crear un flujo de trabajo de Automator con un solo paso - "Ejecutar script de shell"

Entonces File > Save As, y cambiar el formato de archivo a "Aplicación". Cuando abra la aplicación, ejecutará el paso de Shell Script, ejecutará el comando y saldrá cuando finalice.

El beneficio de esto es que es realmente sencillo de hacer, y se puede obtener muy fácilmente la entrada del usuario (por ejemplo, la selección de un montón de archivos), luego pasarlo a la entrada de la secuencia de comandos shell (ya sea a la entrada estándar, o como argumentos).

(Automator está en la carpeta /Applications!)

Example workflow

+6

@dbr, tecla GUI empujador! :) Es broma, esa es una buena sugerencia! – willasaywhat

+0

Sí, fue una excelente sugerencia :) Incluso he escrito acciones de Automator para algunas de mis aplicaciones y todavía me olvido en tiempos como este :) –

+0

Perfecto. ¡Gracias! –

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.

+0

En Snow Leopard al menos, 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 me funcionaron. –

+0

Esto no funciona en OSX 10.9 Mavericks. – stiemannkj1

36

Si no necesita una ventana de Terminal, puede hacer que cualquier archivo ejecutable sea una Aplicación simplemente moviendo example.sh a example.sh.app/Contents/MacOS/example.sh. Puede colocar la Aplicación en su base como cualquier otra y ejecutarla con un clic.

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

+1

¿No sabe por casualidad si hay una manera fácil de pasar los archivos como argumentos al script de shell? Para archivos abiertos usando "abrir con ...". – Fuzzy76

+0

@Fuzzy Lo siento, no, nunca me di cuenta. –

+5

Para cualquiera que intente hacer esto, el nombre de la aplicación debe coincidir exactamente con el nombre del script. Entonces realmente tiene que ser 'example.sh.app', no solo' example.app'. Recibirá una advertencia sobre la aplicación dañada si no coinciden con – Kip

7

Siempre que su script sea ejecutable y no tenga ninguna extensión, puede arrastrarlo como 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 usted quiere tener una extensión (como foo.sh), puede ir a la ventana de información de archivos en el Finder y cambiar la aplicación por defecto para ese script en particular de lo que sea (edición de textos, TextMate, lo predeterminado se establece en su computadora para archivos .sh) a la Terminal. Luego se ejecutará en lugar de abrir en un editor de texto. De nuevo, tendrá que arrastrarlo hacia el lado derecho del Dock.

+0

** Nota: ** Esto no funciona en OSX 10.9 Mavericks. – stiemannkj1

+1

** NOTA **: Esto funciona como un campeón en OS X 10.10 Yosemite. No puedo hacer ningún comentario en 10.9 –

+1

Funciona el 10.11. ¡Gracias! – Yassine

4

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

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

+2

Sugeriría: "Guardar como una aplicación BUNDLE". Los paquetes se lanzan mucho más rápido que las aplicaciones. –

+0

Edición para reflejar esto - ¡gracias! –

14

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

Si es necesario ejecutar una secuencia de comandos y desea el terminal para que aparezca para que pueda ver los resultados que puede hacer, como Abyss Knight dicho y cambie 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 automator o appleScript.Así que para conseguir esto para abrir una nueva terminal el comando me encontré de "ejecución de script de shell" era "myShellScript.command abierta" y se abre en una nueva terminal.

+0

maravilloso, gracias! Ahora todos quieren hacer una solución perfecta sería una forma de cerrar la ventana del terminal cuando se complete la secuencia de comandos. –

+1

y si tiene ventana cerrada en la salida seleccionada en las preferencias de la terminal, puede agregar el comando de salida a la secuencia de comandos y obtendrá lo que desee. –

+0

Esto no funciona en OSX 10.9 Mavericks. – stiemannkj1

4

como Joe mencionado, la creación de la secuencia de comandos shell y luego crear un script AppleScript para llamar al script de shell, hará esto, y es bastante práctico.

Shell Script

  1. Crea tu shell script en el editor de textos, por ejemplo:

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

    (Esto ejecuta el ejecutable w32, utilizando el marco de mono)

  2. guión

    Guardar cáscara, para mi ejemplo "StartKeepass.sh"

de Apple Guión

  1. Abra el Editor AppleScript, y llamar a la secuencia de comandos 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 - comandos AppleScript para llamar la cáscara externa comandos
    • "sh ...." - esto es su script de shell (ruta completa) creado en el paso uno (también se puede ejecutar comandos directos, podría omitir el script de shell y sólo ejecute mi mando 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>" - sustituir con su contraseña (manteniendo comillas) ex "mypass"
    • with administrative privileges - declara que desea ejecutar como administrador

Crea Tu .APP

  1. guardar su applescript como filename.scpt, en mi caso RunKeepass.scpt

  2. guardar como ... su applescript y cambiar el formato de archivo aplicación, lo que resulta en RunKeepass.app en mi caso

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

-1

Alguien escribió ...

Acabo de crear todos los archivos que terminan en ".sh" para abrir la terminal. Funciona bien y que no tiene que cambiar el nombre de cada script que desea ejecutar.

12

en OSX Mavericks:

  1. Crear la secuencia de comandos shell.
  2. Haga su ejecutable script de shell:

    chmod +x your-shell-script.sh 
    
  3. Cambiar el nombre de la secuencia de comandos para tener un sufijo .app:

    mv your-shell-script.sh your-shell-script.app 
    
  4. arrastrar el guión hasta el muelle de OSX.
  5. Cambiar el nombre de la secuencia de comandos de nuevo a un sufijo .sh:

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

Ahora cuando hace clic en la secuencia de comandos en el dock, aparecerá una ventana de terminal y ejecutará su secuencia de comandos.

Bonus: Para llegar al terminal para cerrarse cuando el script ha completado, añadir exit 0 hasta el final y cambiar los ajustes de terminal a "cerrar el depósito, si salido limpiamente" como se dice que hacer en this SO answer.

+0

Agradable, esto funcionó para mí, cualquier forma de azar el icono me pregunto. FYI: TAMBIÉN el paso 7 se refiere al archivo y no al elemento de menú ... –

+0

de la manera agradable! solo todos .sh con terminal abierto. – iHTCboy

+0

@ stiemannkj1, ¿Esto muestra el ícono mientras se ejecuta la aplicación? ¿Hay alguna forma de ocultarlo? – Pacerier

Cuestiones relacionadas