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

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

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

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

¿Alguna sugerencia?

Respuesta1

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

Tenga en cuenta que las otras opciones están tituladasCierra elventanayNo cierres elventana(énfasismío), dejando en claro que esta configuración se refiere solo a cerrar elventana, no todosolicitud.


Podrías definir lo siguiente para tu shell, por ejemplo, en ~/.bash_profilefor bash:

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

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

Puedes darle un nombre diferente para separarlo del normal exit, por supuesto. Me gusta quitpor esto.

Respuesta2

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 garantiza que este código solo tenga efecto cuando se ejecuta dentro de Terminal.

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

  1. Primero comprueba si la Terminal todavía se está ejecutando. Si no, no hace nada.
  2. Sólo se cierra si no hay terminales abiertas o solo la del tty actual. Comprueba si hay pestañas distintas a 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 atrape EXIT, estos interferirán entre sí. La solución es crear otra función que llame a las demás y "capture la_otra_función EXIT" para invocar todo cuando se cierre el shell.

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

Respuesta3

Como una buena solución, intente-

abrir -a /Aplicaciones/Utilidades/Terminal.app *.py O abrir -b com.apple.terminal *.py

Para el shell iniciado, puede ir a Preferencias > Shell > configurarlo para que salga si no hay error.

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

Eso es todo.

Respuesta4

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?

información relacionada