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 :
- Primero verifica si la Terminal todavía está funcionando Si no, no hace nada.
- 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/
osascript -e 'tell application "Terminal" to if not ((count windows) > 1) then quit'