Como executar um script sem fechar o terminal?

69

Eu tenho um script no arquivo bla.she é executável. Quando clico nele, o script é executado e a janela é fechada. Eu gostaria que a janela ficasse aberta .

Algo como comando cmd /k** commandno Windows.

PS Não quero usar pause, mas quero escrever mais comandos após a execução do script.

UAdapter
fonte

Respostas:

81

Coloque $SHELLno final do seu script:

texto alternativo

Uma pequena falha: como gnome-terminalnão está executando o bashshell, ele o considerará um aplicativo e exibirá um aviso quando você tentar fechar o terminal:

There is still a process running in this terminal
Closing the terminal will kill it.

Não encontrei uma boa maneira de esconder esse aviso. Se desejar, você pode desativá-lo totalmente executando:

gconftool --set /apps/gnome-terminal/global/confirm_window_close --type boolean false

Isso não acontece se você estiver usando em xtermvez do gnome-terminal; deveria incomodá-lo.

Stefano Palazzo
fonte
20
Você pode usar em exec $SHELLvez de apenas $SHELLpara fazer o aviso desaparecer sem alterar as configurações.
Andrea Corbellini
11
Mas essa solução cria um shell / processo extra. Isso pode ser evitado?
Lucasvc # 5/16
Não sei como fazer isso, não. O problema é que você perde o controle no IO padrão assim que o primeiro processo do bash é concluído; portanto, você precisa fazer alguns truques com um daemon que transmite esses identificadores, o que seria mais suscetível a erros e irritante.
Stefano Palazzo
10

Usando o Terminal Gnome

Usar o gnome-terminal anexando; bash no final da cadeia de comando e chamar o script com a opção -c funciona. Por exemplo:

gnome-terminal -e "bash -c ~/script.sh;bash"

Isso faz o seguinte:

  1. abre o terminal gnome
  2. executa o script script.sh
  3. mostra o prompt do bash após a conclusão do script.

Você pode sair da janela do terminal gnome fechando a janela ou digite exit no prompt do bash. Ou você pode digitar mais comandos conforme solicitado.

Karsvo
fonte
7

Se você estiver usando xtermuse -hold.

Ramy
fonte
7

Se você tiver acesso ao script, também poderá adicionar o seguinte código no final:

read

Esse código aguardará uma entrada antes de fechar, portanto o terminal permanecerá aberto até você pressionar Enter.

jaycode
fonte
11
Costumo usar bashno final, mas readme permite fechar a janela apenas com ctrl+cou enter, em vez de ctrl+shift+wou alt+f4. Isso é conveniente quando você itera rapidamente em seu script.
Hsandt # 23/18
5

Use basha --init-fileopção com um tubo temporário:

bash --init-file <(echo './<script_name>')

Ex:

bash --init-file <(echo './bla.sh')
Prem Anand
fonte
2

Usar xterme anexar ;bashno final da cadeia de comando funciona. Por exemplo:

xterm -e "bash ~/script.sh;bash"

Isso faz o seguinte:

  1. abre o xterm
  2. executa o script script.sh
  3. mostra o prompt do bash após a conclusão do script.

Você pode sair da janela do xterm fechando a janela ou digitando exitno prompt do bash. Ou você pode digitar mais comandos conforme solicitado.

Karsvo
fonte
1
xterm -e bash --rcfile bla.sh

Isso executará o script em uma nova janela e ainda dará o controle da janela após a conclusão.

No entanto, a nova janela não será carregada ~/.bashrcnormalmente, pois executamos bla.sh. Isso pode ser remediado colocando-se

. ~/.bashrc

no topo de bla.sh

Steven Penny
fonte