¿Cómo cierro automáticamente Terminal.app al salir en OS X Lion?

3

Recientemente adquirí una nueva Mac con OS X Lion, y la estoy ajustando a mis necesidades.

Intenté configurar el cierre automático en la Terminal usando sus preferencias (como lo hice con Tiger y Snow Leopard) pero no funciona. He configurado "Cerrar si el shell salió limpiamente", pero cuando escribo exit, la ventana se cierra, pero el Terminal.app todavía está abierto. Su menú es visible y con alt+ tabpuedo verlo ejecutándose.

¿Alguna sugerencia?

mTorres
fuente

Respuestas:

8

Esta opción nunca ha cerrado la aplicación Terminal.

Tenga en cuenta que las otras opciones se titulan Cerrar la ventana y No cerrar la ventana (el énfasis es mío), dejando en claro que esta configuración se refiere solo al cierre de la ventana , no a toda la aplicación .


Se podría definir lo siguiente para su cáscara, por ejemplo, en ~/.bash_profilepara bash:

function exit {
    osascript -e 'tell application "Terminal" to quit' 
}

Luego agregue osascripta la lista de aplicaciones que no requieren confirmación antes de salir (en Preferencias> Configuración> Shell). Escriba exitpara salir de la Terminal, a menos que haya otras pestañas con programas de bloqueo en ejecución.

Puede darle un nombre diferente para separarlo de un regular exit, por supuesto. Me gusta quitpara esto

Daniel Beck
fuente
2
Usar un AppleScript para salir de Terminal es una buena idea, pero probablemente debería hacerlo solo si no hay otras ventanas abiertas:osascript -e 'tell application "Terminal" to if not ((count windows) > 1) then quit'
Chris Page
@ Chris Posible, sin embargo, es cuestión de gustos. Dejo que la protección de salida de la terminal cuando los procesos en ejecución manejan eso.
Daniel Beck
Daniel Beck, mi punto es que si lo configura para que cada vez que salga de un shell se ejecute esto, no podrá cerrar ninguna terminal a menos que quiera cerrarlas todas y salir de la Terminal. La pregunta que hace Mtorres es cómo hacer que Terminal se cierre cuando se cierra la última ventana de terminal; para hacer eso, solo salga de la Terminal cuando solo hay una ventana abierta.
Chris Page
@ Chris Posiblemente. No sabemos si el usuario realmente usa múltiples ventanas de Terminal. En ese sentido, su secuencia de comandos es técnicamente incompleta, ya que ignora otras pestañas posiblemente existentes; y no hace nada (ni siquiera cierra la pestaña / ventana) cuando hay varias ventanas. La pregunta tampoco menciona las pestañas. Sin más comentarios, no podemos estar seguros. Además, hay una razón por la que sugiero darle un nombre diferente a la función, de esa manera, él realmente tiene una opción.
Daniel Beck
Hola los dos! Normalmente trabajo con varias pestañas, pero no me gusta cerrarlas todas a la vez. Me gusta su pequeña discusión al respecto, y me quedo con la sugerencia de Chris. De todos modos, Daniel señaló directamente a la solución. ¡Gracias!
mTorres
1

Para que Terminal se cierre después de cerrar el último terminal / shell, puede hacer que su shell ejecute un AppleScript al salir:

# Quit Terminal when this shell exists if there are no other terminals open.                                                                                                                    
if [ "$TERM_PROGRAM" == "Apple_Terminal" ]; then
    quit_terminal_when_no_terminals_remain() {
        osascript -e 'tell application "Terminal" to if running and (count every tab of every window whose tty is not "'"$(tty)"'") is 0 then quit'
    }
    trap quit_terminal_when_no_terminals_remain EXIT
fi

La prueba para Apple_Terminal asegura que este código solo surte efecto cuando se ejecuta dentro de Terminal.

Como esto se ejecuta de forma asincrónica, el script puede ejecutarse antes o después de que el terminal que lo contiene esté cerrado (aunque generalmente se ejecuta después), y si este terminal está cerrado porque el usuario salió de Terminal, es posible que Terminal ya no se ejecute cuando se ejecuta el script, por lo tanto :

  1. Primero verifica si la Terminal todavía está funcionando Si no, no hace nada.
  2. Solo se cierra si no hay terminales abiertas o solo la del tty actual. Comprueba si hay otras pestañas distintas de la del dispositivo tty al que está conectado el shell actual "$ (tty)".

Tenga en cuenta que si invoca cualquier otro código de shell que atrapa EXIT, estos interferirán entre sí. La solución es crear otra función que llame a las demás y "atrapar la_salida_función_salida" para invocar todo cuando salga el shell.

Por cierto, como siempre, si esta funcionalidad es importante para usted, presente una solicitud de mejora con Apple. Solicite una configuración de preferencia para hacer que Terminal se cierre cuando no haya más ventanas abiertas: https://bugreport.apple.com/

Chris Page
fuente
1

Como una solución ordenada, intente

open -a /Applications/Utilities/Terminal.app * .py O abierto -b com.apple.terminal * .py

Para el shell lanzado, puede ir a Preferencias> Shell> configurarlo para salir si no hay error.

Esto lo uso a menudo cuando necesito ejecutar casi simultáneamente muchos scripts / comandos.

Eso es.

Mohammad Shahid Siddiqui
fuente
0

Una solución mucho más fácil y elegante sería establecer un alias en su .bash_profile como este comando:

alias quit="killall Terminal"

Hermosa, ¿eh?

ijverig
fuente
1
Esto abortará, no importa lo que se esté ejecutando, todas sus sesiones de Terminal. Los programas probablemente recibirán sighupy terminarán en medio de lo que están haciendo. Esto solo funciona si lo estás usando religiosamente screeno tmux, de lo contrario, la primera vez que lo ingreses por accidente lo lamentarás.
Daniel Beck