Como fecho automaticamente o Terminal.app ao sair do OS X Lion?

Como fecho automaticamente o Terminal.app ao sair do OS X Lion?

Adquiri recentemente um novo Mac com OS X Lion e estou ajustando-o de acordo com minhas necessidades.

Eu estava tentando configurar o fechamento automático no Terminal usando suas preferências (como fiz com o Tiger e o Snow Leopard), mas não está funcionando. Eu configurei "Fechar se o shell saiu corretamente", mas quando digito exit, a janela é fechada, mas o Terminal.app ainda está aberto. Seu menu está visível e com alt+ tabposso vê-lo funcionando.

Alguma sugestão?

Responder1

Esta opção nunca fechou o aplicativo Terminal.

Observe que as outras opções são intituladasFeche ojanelaeNão feche ojanela(ênfasemeu), deixando claro que esta configuração se refere apenas ao fechamento dojanela, não a totalidadeaplicativo.


Você pode definir o seguinte para o seu shell, por exemplo, em ~/.bash_profilefor bash:

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

Em seguida, adicione osascriptà lista de aplicativos que não requerem confirmação antes de sair (em Preferências > Configurações > Shell). Digite exitpara sair do Terminal, a menos que haja outras guias com programas de bloqueio em execução.

Você pode dar um nome diferente para separar de um nome normal exit, é claro. Eu gosto quitdisso.

Responder2

Para que o Terminal feche depois de fechar o último terminal/shell, você pode fazer com que 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 Apple_Terminal garante que esse código só tenha efeito quando executado dentro do Terminal.

Como é executado de forma assíncrona, o script pode ser executado antes ou depois do terminal que o contém ser fechado (embora geralmente seja executado depois), e se este terminal for fechado porque o usuário saiu do Terminal, o Terminal pode não estar mais em execução quando o script for executado, portanto :

  1. Primeiro, ele verifica se o Terminal ainda está em execução. Se não, não faz nada.
  2. Ele só fecha se não houver terminais abertos ou apenas aquele para o tty atual. Ele verifica se há alguma aba diferente daquela do dispositivo tty ao qual o shell atual está conectado "$(tty)".

Observe que se você invocar qualquer outro código shell que intercepte EXIT, eles interferirão um no outro. A solução é criar outra função que chame as outras e "trap the_other_function EXIT" para invocar tudo quando o shell sair.

A propósito, como sempre, se esta funcionalidade for importante para você, faça uma solicitação de melhoria à Apple. Peça uma configuração de preferência para fazer o Terminal encerrar quando não houver mais janelas abertas:https://bugreport.apple.com/

Responder3

Como uma solução interessante, tente-

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

Para o shell iniciado, você pode ir em Preferências > Shell > configurá-lo para sair se não houver erro.

Isso eu costumo usar quando preciso executar muitos scripts/comandos quase simultaneamente.

É isso.

Responder4

Uma solução elegante muito mais fácil seria definir um alias em seu .bash_profile como este comando:

alias quit="killall Terminal"

Lindo, né?

informação relacionada