Com um lançador para uma aplicação de terminal, como posso manter o terminal aberto após a conclusão do programa?

24

Eu tenho um comando de terminal que eu corro de um lançador de aplicativos. Isso funciona muito bem, mas às vezes o comando falha, então eu gostaria que o terminal ficasse aberto para que eu pudesse ver os resultados. Como posso fazer isso?

    
por Eugene M 31.08.2010 / 14:19

6 respostas

22

Assumindo que seu comando é chamado de mycommand , altero meu ativador para executar isso:

gnome-terminal -e "mycommand|less"

Se você deseja uma solução mais permanente, talvez mais limpa, abra o terminal gnome, vá para Editar, Preferências de perfil e clique na guia Título e Comando. Altere a opção "Quando o comando sai" para "Manter o terminal aberto".

Quando você executa comandos, ele deve deixar o terminal aberto quando algo for executado.

Edit: Se você realmente não se importa com o terminal, você pode simplesmente usar o sinalizador de espera do xterm:

xterm -e "mycommand" hold
    
por Oli 31.08.2010 / 14:32
8

No seu atalho .desktop, use este

Exec=gnome-terminal -x bash -c "YOUR_SCRIPT; exec $SHELL"

Após o término do seu script, o processo de Bash se substituirá por uma nova invocação de si mesmo.

Se você precisar passar argumentos citados para o seu script, terá que escapar das citações:

Exec=gnome-terminal -x bash -c "YOUR_SCRIPT \"arg with spaces\"; exec $SHELL"
    
por mivk 07.01.2013 / 17:26
7

Seu lançador está executando um script certo?

No final do seu script, adicione

read -p "Press any key to exit > " -n1 junk
echo 

Em seguida, seu script aguardará até você optar por encerrá-lo.

    
por Richard Holloway 31.08.2010 / 14:44
3

Uma abordagem um pouco diferente das outras respostas: execute seu comando e, se isso falhar, crie um shell. Dessa forma, você não precisa manter o terminal aberto (o que não distingue entre sucesso ou falha de comando), e você pode achar que esse shell é particularmente útil em falhas. Para fechá-lo, basta usar Ctrl-D (EOF), "sair", Alt-F4 (ou o que seu gerenciador de janelas usar para fechar janelas), etc.

success-or-shell

#!/bin/sh
[ $# -eq 0 ] && {
  echo "$(basename $0): no command" >&2
  exit 1
}
"$@" || {
  echo "failed: $?"
  exec $SHELL
}

Coloque este arquivo em algum lugar, como ~ / bin, e use "sucesso-ou-shell seu comando original" em seu lançador.

    
por Roger Pate 01.09.2010 / 22:34
0

Esta resposta dá a melhor resposta que vi até agora para fazer o que você quer. Eles recomendam fazer um script com os comandos para executar e usá-lo com o parâmetro --init-file (bash specific, mas você provavelmente poderia fazer o mesmo para csh / tcsh / zsh, etc):

#!/bin/bash --init-file
commands to run

... e execute-o como:

xterm -e /path/to/script
# or
gnome-terminal -e /path/to/script
# or
the-terminal -e bash --init-file /path/to/script/with/no/shebang
    
por Brian Vandenberg 23.01.2015 / 18:14
0

Use o comando watch .

Formato: watch -n60 myCommand ou watch -n60 "my command string"

  • o -n especificou o número de segundos a aguardar entre as chamadas para myCommand ; ex: o comando acima irá chamar myCommand a cada 60 segundos, para sempre.
  • Se o comando tiver várias palavras, coloque-o entre aspas duplas: "my command string" .

Digamos que você queira um Iniciador que exiba o uso do disco e permaneça aberto para o leitor ver. Eu simplesmente usaria esse comando dentro do Launcher:% watch -n60 "df -h" , que chama df -h agora a cada 60 segundos.

Eu gosto disso pela resposta aceita de gnome-terminal -e "mycommand|less" porque eu estou rodando o Xubuntu, que usa um terminal diferente por padrão.

    
por Gabriel Staples 02.09.2017 / 04:11