Você pode usar .exec ./your-script
Um emulador de terminal como o GNOME Terminal é encerrado quando o processo inicial em execução nele - que geralmente é um shell - termina.
Se você já está em um terminal e a única coisa que deseja fazer antes de sair desse terminal é executar um script (ou programa) específico, isso significa que você não precisa mais do shell que está sendo executado nele. Assim, você pode usar o exec
builtin do shell para fazer com que o shell se substitua pelo processo criado por seu comando.
- No caso do seu script, esse é outro processo de shell - assim como um segundo processo de shell é criado quando você executa um script sem
exec
.
A sintaxe é , por exemplo ,.exec command
exec ./your-script
exec
: um exemplo
Por exemplo, suponha que eu tenha um script de shell chamado count
, marcado como executável e localizado no diretório atual. Contém:
#!/usr/bin/env bash
for i in {5..1}; do echo $i; sleep 1; done
E, em um terminal, eu corro:
exec ./count
Isto imprime o numerais 5
, 4
, 3
, 2
, e 1
, por um segundo, e em seguida, os terminais fecha a janela.
Se você executar isso a partir de algo diferente do primeiro processo executado no seu terminal - por exemplo, se você executou bash
primeiro para iniciar outra instância do shell - isso o levará de volta ao shell que criou esse processo, em vez de sair do terminal. (Esta ressalva se aplica igualmente a exit
métodos baseados em).
Você pode usar ../your-script; exit
Se você não quiser dizer ao seu shell para substituir-se pelo novo processo (via exec
), você pode pedir para ele permanecer, mas sair imediatamente após o término do novo processo.
Para fazer isso, execute seu comando e o exit
comando, separados por, ;
para que possam ser fornecidos em uma linha.
A sintaxe é command; exit
, por exemplo ,../your-script; exit
command; exit
vs. command && exit
Você pode notar que isso se parece com o método sugerido nas respostas de kos e heemayl . A diferença é que:./your-script && exit
&&
executa o segundo comando somente se o primeiro comando relatou que obteve êxito retornando um código de saída zero.
;
executa o segundo comando, independentemente de o primeiro comando ter relatado ou não sucesso.
Qual você deseja depende da situação específica. Se o comando falhar, você deseja que o shell de chamada (e o terminal de hospedagem) permaneça ativo? Se sim, use &&
; caso contrário, use ;
.
Também existe command || exit
, que fecha o shell de chamada apenas se houver falhacommand
relatada .