script run mac ejecutar macos shell unix command

macos - run - ¿Cerrar la ventana del terminal desde el script de shell(Unix)?



sh terminal mac (6)

¿Hay alguna manera de cerrar una ventana de Terminal desde dentro de un script de shell? Tengo un archivo .command que debería salir del camino una vez hecho.


Puede usar apple script para salir de la terminal app . Agregue lo siguiente a su secuencia de comandos

osascript -e ''tell application "Terminal" to quit''

Esto le dará una ventana emergente que confirma el cierre de la aplicación. Puede desactivar esto en las preferencias de Terminal.

Alternativamente, también puede usar el comando killall para salir de la aplicación. Lo siguiente funcionaría igual de bien.

killall Terminal

Nota:

Solo como una nota al margen, puede agregar libremente los comandos anteriores a su secuencia de comandos y funcionará como lo desee. Sin embargo, hay algunas advertencias. En primer lugar , limitará la capacidad de su script para trabajar en diferentes cuadros. En segundo lugar , sería más seguro usar nohup para que todos los comandos que se estén ejecutando no se detengan debido a que se cierra la Terminal app .


closeWindow() { /usr/bin/osascript << _OSACLOSE_ tell application "Terminal" close (every window whose name contains "YourScriptName") end tell delay 0.3 tell application "System Events" to click UI element "Close" of sheet 1 of window 1 of application process "Terminal" _OSACLOSE_ }

Esto cerrará la ventana de Terminal para su script y mantendrá abierta cualquier otra ventana de Terminal siempre que sus títulos de ventana no coincidan. Para que funcione, la Terminal deberá agregarse a la lista de aplicaciones permitidas para usar el marco de Accesibilidad. También puede recorrer las ventanas de Terminal con un comando de repetición y cerrar cada ventana x que contenga un elemento de IU "Cerrar" en la hoja 1.


Esto funciona para mí:

#!/bin/sh {your script here} osascript -e ''tell application "Terminal" to close (every window whose name contains ".command")'' & exit

Esto funcionará para cerrar solo las ventanas abiertas con un archivo .command pero deje las cosas que ya se están ejecutando en otras ventanas de la terminal. Sé que casi siempre tengo algo raro o gruñón viendo algo, así que no quiero abandonar el terminal por completo.


Como no desea eliminar todas las ventanas de Terminal, primero cambie el nombre de su ventana de "Terminal" a otra cosa:

echo -n -e "/ 033] 0; Mi ventana Nombre / 007"

Luego, al final del script, usa:

osascript -e ''indicar a la aplicación "Terminal" que se cierre (cada ventana cuyo nombre contenga "Mi nombre de ventana") &


Encuentro que la mejor solución para esto es usar Automator para crear una verdadera aplicación OSX que funcionará de la misma manera independientemente de cómo esté configurado su sistema. Puede hacer que el Automator ejecute su script de shell o puede incrustar el script de shell en Automator.

Así es como lo haces:

  1. Ejecutar Automator (en Aplicaciones).
  2. Elija "Nuevo documento" y cuando se le pregunte "Elija un tipo para su documento", seleccione "Aplicación"
  3. En el panel izquierdo, seleccione "Utilidades" y luego "Ejecutar script de shell".
  4. Escriba los comandos del script en el elemento del flujo de trabajo en el panel derecho. Puede llamar a otro script de shell, o simplemente poner sus comandos en su directamente.
  5. Guarde la aplicación, que será una aplicación Mac completamente desarrollada. Incluso puede cortar y pegar iconos de otras aplicaciones para dar personalidad a su guión.

El uso de la exit 0 terminará limpiamente la secuencia de comandos.

Si la ventana de Terminal permanece abierta es configurable por el usuario. El valor predeterminado es permanecer siempre abierto. Para cambiar esto:

Terminal.app > Preferences > Profiles > Shell - "When the shell exists:" > Close if the shell exited cleanly - "Ask before closing:" (•) Never -- OR -- (•) Only if there are....

Cuando se utiliza "Cerrar si el shell salió limpiamente", el script cerrará la ventana si el resultado de salida es 0, que es el valor predeterminado si no salió mal.