removido
(usa Nenhuma)
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
}