OSX - Como fechar automaticamente a janela do Terminal após a execução do comando “sair”.

104

Quando terminar de usar o Terminal, quero sair dele. No momento, tenho três opções:

  1. Terminal killall. Isso encerrará o processo, mas de forma abrupta. Não acho que seja a melhor ideia.

  2. Saída de chamada. Alterei as configurações para que a saída feche o Terminal. O aplicativo ainda aparece aberto no Dock e não faz o que eu quero.

  3. Clique com o botão direito> Sair. No entanto, este não é um comando de Terminal para sair dele.

Então agora, como devo sair e fechar o Terminal? Já ouvi algo sobre osascript, mas não tenho certeza. Quero sair e fechar, para que o Terminal não esteja mais aberto, tanto como janela quanto como processo.

aço escuro
fonte
Por exemplo kill, o killallpadrão é enviar SIGTERM, que pode ser detectado. Alguns programas captam, limpam depois de si mesmos e fecham normalmente. Não tenho ideia se Terminal.appestá entre eles. No entanto, eu suspeito que isso seria melhor em Ask Different ou Super User em apuros, pois não parece ter nenhum conteúdo de programação.
dmckee --- gatinho ex-moderador
1
Acho que a pergunta seria melhor formulada “Como sair do Terminal após o último shell sair?”.
Chris Página

Respostas:

194

em Terminal.app

Preferências> Perfis> (Selecione um perfil)> Shell.

em 'Quando o shell sai' escolhido 'Fechar a janela'

Duque
fonte
@PrabhuKonchada não seria muito terrível se você quisesse usar esse espaço para alimentar a saída do usuário, mas caso contrário, a resposta de insanikov teria sido muito boa para mim
Frankenmint
Óbvio e limpo, perfeito.
Aydinugur
12
Nas versões mais recentes do OS X, esta opção pode ser encontrada em 'Preferências> Perfis> (Selecione um perfil)> Shell.
XtraSimplicity
Você pode usar o link para obter mais informações passo a passo cnet.com/news/terminal-tip-close-windows-after-clean-exit
Krishan Kumar Mourya
1
Você também pode selecionar todos os perfis e fazer a alteração em todos de uma vez.
31

Que tal o bom e velho Command-Q?

Holygeek
fonte
Ele quer dizer comando Q. Este é um bom método? Não parece diferente de matar tudo para mim.
darksteel
@darksteel: Command-Q é a maneira correta de fechar um aplicativo no Mac. Fazer um killall provavelmente também está OK, já que o aplicativo é instruído a encerrar de forma limpa.
tomlogic
2
Sim, eu queria digitar "Command", mas saiu como Ctrl. Eu diria que é um caso de PEBBAF (existe problema entre o cérebro e a ponta dos dedos).
holygeek,
kill / killall geralmente não é uma boa maneira de encerrar um aplicativo. Isso pode descartar o estado não salvo ou salvar o estado que não reflete corretamente a aparência do aplicativo se você o encerrasse. O Mac OS X tem um recurso de “encerramento repentino”, onde os programas podem indicar quando estão em um estado em que é seguro eliminá-los (com SIGKILL, na verdade), e se você verificou o estado do Terminal com Monitor de atividade para verificar se é seguro eliminá-lo primeiro (mostre a coluna “Rescisão repentina” e procure “Sim”), você poderia fazer isso, mas não pode automatizar facilmente esse fluxo de trabalho.
Chris Página
Sempre podemos usar command-Q após a saída, que fecha todos os processos e, em seguida, fecha o terminal.
Optimus Prime
29

No aplicativo Terminal, selecione Preferências >> guia Perfis .

Selecione a guia Shell à direita. insira a descrição da imagem aqui

Você pode escolher Nunca perguntar antes de fechar para suprimir o aviso.

Blaise
fonte
5
Consegui isso com When shell exits:"fechar a janela"
Anup
1
Essa resposta não funcionou para mim, escolhendo "Nunca". No entanto, o comentário de @Anup sobre "Fechar a janela" funcionou para mim.
Final de
12

Na verdade, você deve definir uma configuração no seu Terminal, quando o Terminal estiver ativado pressione + ,e você verá a tela abaixo:

insira a descrição da imagem aqui

Em seguida, pressione a guia shell e você verá a tela abaixo:

insira a descrição da imagem aqui

Agora selecione Close if the shell exited cleanlypara Quando o shell sai .

Pela configuração acima, a cada vez com o exitcomando, o Terminal será fechado, mas não será encerrado.

AmerllicA
fonte
10

Você pode usar AppleScript por meio do osascriptcomando:

osascript -e 'tell application "Terminal" to quit'
icktoofay
fonte
Eu não tinha tentado o comando osascript, mas tenho dois problemas com isso: 1. É um pouco longo para um comando ser encerrado. Não deveria ser mais simples? Eu gosto no Windows como o exit termina o prompt de comando. 2. Ainda me pede para sair do Terminal. Eu quero apenas seguir os procedimentos. Uma janela se abriu perguntando se eu realmente queria parar.
darksteel
1
@darksteel: 1. Adicione um alias em seu .bashrc(ou equivalente se você usar um shell diferente). Ainda estou pensando em uma resposta para 2.
icktoofay
Estou pensando que o comando Q funciona melhor. Mas estou curioso para saber como configurar um alias corretamente. Existem alguns comandos, como "ping google.com" que eu executo com freqüência suficiente para preferir um alias.
darksteel
@darksteel: Esta é uma maneira de pensar demais, mas para evitar 2, você poderia iniciar um processo daemonizado que fica suspenso por cerca de um segundo, e então exitapós iniciar o processo daemonizado. Depois que o processo daemonizado aguardou um segundo, ele pode chamar osascriptconforme descrito.
icktoofay
@darksteel: Você também pode acionar uma tecla através de osascript: tell application "System Events" to keystroke "a" using command down. Isso provavelmente também terá o problema.
icktoofay
9

Em uma janela de terminal, você pode digitar:

kill -9 $(ps -p $PPID -o ppid=)

Isso encerrará o processo de aplicativo do Terminal, que é o pai do pai do processo atual, conforme visto pelo comando kill.

Para fechar uma janela Terminal de dentro de um script em execução, você precisa subir mais um nível na hierarquia do processo como este:

kill -9 $(ps -p $(ps -p $PPID -o ppid=) -o ppid=) 
GOTO 0
fonte
7
Para sua informação, esta solução também mata outras janelas de terminal.
tresf
E não use, a kill -9menos que saiba que outros sinais não funcionarão.
tripleee
9

Que tenho usado ctrl + d. Isso o joga no destino onde você iniciou o comando sqlite3 em primeiro lugar.

Kalafun
fonte
5

osascript -e "tell application \"System Events\" to keystroke \"w\" using command down"

Isso simula um pressionamento de tecla CMD+ w.

Se você quiser que o Terminal feche completamente, você pode usar: osascript -e "tell application \"System Events\" to keystroke \"q\" using command down"

Isso não dá erros e faz com que o Terminal pare de forma limpa.

Insanikov
fonte
4

Você também pode usar este comando complicado, que não dispara um aviso sobre o encerramento de seu próprio processo:
osascript -e "do shell script \"osascript -e \\\"tell application \\\\\\\"Terminal\\\\\\\" to quit\\\" &> /dev/null &\""; exit

Este comando é bastante longo, então você pode definir um alias (como quit) em seu perfil bash:
alias quit='osascript -e "do shell script \"osascript -e \\\"tell application \\\\\\\"Terminal\\\\\\\" to quit\\\" &> /dev/null &\""; exit'

Isso permitiria que você simplesmente digite quitno terminal sem ter que mexer com nenhuma outra configuração.

David P.
fonte
2

Use o osascriptcomando em seu código como icktoofay mencionou:osascript -e 'tell application "Terminal" to quit'

Em seguida, abra as preferências do Terminal, vá para Configurações> Shell e defina "Avisar antes de fechar:" como "Nunca". O Terminal agora deve fechar completamente (não permanecer aberto no dock) e ignorar o prompt antes de sair. Se você tiver apenas uma janela do Terminal aberta e o osascriptcomando for sua última linha de código, ele deve esperar o comando executado antes de terminar.

Isso não seria ideal se você estiver executando scripts na mesma janela ou em outras janelas em segundo plano (por exemplo, você pode executar um comando em segundo plano e continuar usando a janela atual para outros comandos se o primeiro comando for seguido por um "e" comercial ); seja cuidadoso!

Se você embrulhar o osascriptcódigo em um arquivo de script de shell, provavelmente poderá chamá-lo com qualquer nome de arquivo conciso que você der - desde que esteja no caminho de pesquisa do Terminal (execute echo $PATHpara ver onde o Terminal procura por scripts).

John
fonte
1

Crie um script:

cat ~/exit.scpt

como isso:

  • Nota: Se houver apenas uma janela, basta sair do aplicativo, caso contrário simule command + wpara fechar a guia)

tell application "Terminal" set WindowNum to get window count if WindowNum = 1 then quit else tell application "System Events" to keystroke "w" using command down end if end tell

Em seguida, adicione um alias em seu * shrc

apenas como vi ~/.bashrcou zshrc(mais alguma coisa?)

adicione: alias exit="osascript ~/exit.scpt"

E fonte de ~ / .bashrc ou reabra seu terminal.app

Pecado
fonte
0

Tenho usado

sair do terminal -n

no final dos meus scripts. Você deve ter o terminal configurado para nunca solicitar nas preferências

Então Terminal> Preferências> Configurações> Shell Quando o shell sai Feche a janela Avisar antes de fechar Nunca

Jon
fonte
0

Tentei várias variações das respostas aqui. Não importa o que eu tente, sempre posso encontrar um caso de uso em que o usuário é solicitado a fechar o Terminal.

Como meu script é simples ( drutil -drive 2 tray open- para abrir uma unidade de DVD específica), o usuário não precisa ver a janela do Terminal enquanto o script é executado.

Minha solução foi transformar o script em um aplicativo, que executa o script sem exibir uma janela do Terminal. O benefício adicional é que todas as janelas do terminal que já estão abertas permanecem abertas e, se nenhuma estiver aberta, o Terminal não permanecerá residente após o término do script. Ele não parece iniciar o Terminal para executar o script bash.

Segui estas instruções para transformar meu script em um aplicativo: https://superuser.com/a/1354541/162011

James L.
fonte
-3

Se este for um Mac, digite 'exit' e pressione Enter.

Tremaine
fonte