Para que o Terminal seja encerrado após você fechar o último terminal / shell, você pode fazer com que o seu shell execute um AppleScript ao sair:
# 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
O teste para o Apple_Terminal garante que este código só tenha efeito quando executado dentro do Terminal.
Como isso é executado de forma assíncrona, o script pode ser executado antes ou depois que o terminal que o contém é fechado (embora geralmente seja executado depois) e se esse terminal for fechado porque o usuário encerrou o Terminal, o Terminal pode não estar mais em execução quando o script corre, portanto:
- Primeiro, verifica se o Terminal ainda está em execução. Se não, não faz nada.
- Sairá somente se não houver nenhum terminal aberto ou somente aquele para o tty atual. Ele verifica se há alguma aba diferente daquela para o dispositivo tty ao qual o shell atual está conectado "$ (tty)".
Observe que, se você invocar qualquer outro código de shell que captura o EXIT, eles interferirão um no outro. A solução é criar outra função que chame os outros e "interceptar a_autra_função EXIT" para invocar tudo quando o shell sair.
A propósito, como sempre, se essa funcionalidade for importante para você, registre uma solicitação de melhoria com a Apple. Solicite uma configuração de preferência para que o Terminal seja encerrado quando não houver mais janelas abertas: link