Executando um arquivo bash em uma nova janela de terminal e feche a janela quando terminar

2

Gostaria de executar um arquivo bash em um darwin via:

open -n -a Terminal --args bashfile.sh

O próprio arquivo bash se parece com:

#! /bin/sh
<application> <arguments>

Funciona como esperado, mas existe uma maneira de fechar a janela do terminal quando o processo é concluído ?

Eu já tentei exit; e exit 0; , mas sem sucesso.

Solução parcial

Nas preferências do Terminal ( Terminal > Preferências > Configurações > Shell ), você pode definir o sinalizador "Quando o shell existir" para close the window if the shell exited cleanly . Se nada deu errado, isso fecha a janela do terminal depois, mas não a aplicação como tal.

    
por p2or 07.08.2016 / 15:40

3 respostas

2

Se esta é a única janela do terminal, você pode tentar eliminar o processo do script, que terminará o processo Terminal e o script bash sendo executado nele. A parte mais difícil aqui é determinar a maneira correta de matá-lo que funcionará para você. A maneira mais fácil é fazer:

killall Terminal

Acho que várias janelas do Terminal são executadas em um único processo, o que significa que você terá todas as janelas fechadas após esse comando.

Se você estiver usando outro emulador de terminal como sua ferramenta principal (como o iTerm), então não será um problema.

    
por 07.08.2016 / 15:52
1

Você marca bash , mas shebang aponta para /bin/sh . Eu suponho que sh é um link simbólico para bash em seu sistema.

Tente

kill $PPID

no final do seu script. À medida que $PPID se expande para o ID do processo do pai do shell, ele deve matar o Terminal correto e deixar outras instâncias sozinhos.

No meu Ubuntu Terminal é o emulador de terminal GNUstep. Eu não sei como é semelhante ao seu.

Além disso, meu Terminal (o pacote terminal.app , versão 0.9.8-1+nmu1build1 , OS Ubuntu 14.04.5 LTS ) geralmente se comporta mal quando recebe o sinal de dentro do script; fica pendurado sem esperança. Um bug, eu acho. A única maneira firme de matá-lo é com força:

kill -SIGKILL $PPID
    
por 08.08.2016 / 23:05
0

A página man do Bash tem uma seção sobre Parâmetros Especiais. O que você quer é $$ , que se expande para o PID do shell atual.

kill $$ deve fazer o que quiser, embora eu esteja no Win7 agora e não possa testá-lo.

    
por 07.08.2016 / 17:33