Comando para fechar o terminal por script

1. Comando para fechar o terminal por script

Poliana Brito Fidelis
poly

(usa Outra)

Enviado em 21/07/2022 - 15:08h

Queria saber se tem alguma forma de fechar o terminal através do shell script, já pesquisei mas não encontrei nada sobre. Testei o comando exit, mas não funciona pois ele fecha o terminal secundário criado pelo próprio script para rodar.


  


2. Re: Comando para fechar o terminal por script

jota
stormer

(usa Outra)

Enviado em 21/07/2022 - 18:04h

Mas para que você quer fechar o terminal com um script? Está tentando lançar um `daemon' ou o que?

No meu caso, uso o Tmux, que é um multiplexador de terminal... Quando abro ele, abre-se um outro terminal dentro do meu XTerm. Se eu quiser fechar o terminal completamente para voltar ao meu desktop, eu devo primeiro `exit` do Tmux, e depois dar outro `exit` para sair da shell do XTerm.

Para fazer sair dos dois terminais aninhados, não há como transmitir o sinal via variáveis, já que o terminal do XTerm, que é pai do meu terminal do Tmux, somente consegue esperar pelo `código de saída' do Tmux e nada além disso. Mesmo quando eu dou `exit 1`, como o comando exit é rodado sem problemas, o Tmux não entende que deve transmitir o sinal de saída do último comando executado e sinaliza que ele próprio sair corretamente com código 0.

De qualquer forma, tem várias formas de você transmitir sinal para a shell parental, mas é necessário fazer vários ajustes. Por exemplo, você poderá rodar o script que cria um arquivo. Após a execução do script, a shell parental deve ver se o determinado arquivo existe. Se sim, executará o comando `exit` na shell do terminal.

No seu caso, porém, pode ser simples a solução como:

$ script.sh || exit 


Se for um daemon e não imprimir nada na tela, então pode colocar um código que imprima alguma coisa antes de sair, por exemplo, `echo "exit"`.

No script:
#!/bin/bash

comando >/dev/null || echo "exit"

No terminal:
$ check=$(script.sh) ; $check 


Nesse caso, após a execução do script, se o código de saída for de erro, o comando `exit` que foi imprimido na variável é executado. Mas enfim, parece que parece querer na verdade alguma outra coisa...

---

Para você ter uma ideia, para sair do meu Tmux e automaticamente fechar o XTerm, eu uso as seguintes funções no meu arquivo de configuração da shell `.zshrc`. Assim, quando quero sair do Tmux e fechar o XTerm, eu digito `qq`...

#tmux
#file to hold Tmux signal
_TMUXSIG="${TMPD:-/tmp}/tmux.exit.$EUID"
#start tmux
if [[ -z $TMUX && $EUID -gt 0 ]]
then
command tmux
#is exit signal file present?
if [[ -e "$_TMUXSIG" ]]
then
#execute a simple command
set -- "$(<"$_TMUXSIG")"
command rm "$_TMUXSIG"
eval "$*"
set --
fi
fi
#exit tmux and terminal emulator, too
qq()
{
#create signal file if within Tmux
[[ "$TMUX" ]] && echo exit >"$_TMUXSIG"
echo '[bye..]' >&2
exit
}







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts