Eu tenho um script que é executado em segundo plano (sem janelas de terminal ou TTY) e ocasionalmente faz algo.

Agora quero que ele faça outra coisa quando fizer alguma coisa, é abrir uma janela do Terminal Gnome e executar 2 comandos. Na verdade, eu só preciso executar 1 comando, mas quero que a janela do terminal fique aberta para que eu possa ver a saída do comando. O comando imprime em stdout e stderr e sua saída muda com o tempo, então apenas gravá-lo em um arquivo e enviar algum tipo de notificação não faria o trabalho muito bem.

Posso fazer o Terminal Gnome para abra uma janela e execute 1 comando:

gnome-terminal -e "sleep 10" 

Eu escolhi sleep como o comando de longa duração para simplificar. No entanto, ao adicionar outro comando, nenhuma janela de terminal é aberta:

gnome-terminal -e "echo test; sleep 10" 

Qual é a solução para isso?

Comentários

Resposta

gnome-terminal trata tudo entre aspas como um comando, portanto, para executar muitos deles consecutivamente, você precisa inicie o interpretador (geralmente um shell) e faça as coisas dentro dele, por exemplo:

gnome-terminal -e "sh -c "echo test; sleep 10"" 

A propósito, você pode querer que a janela permaneça aberta mesmo depois que os comandos terminem seu trabalho, nesse caso, apenas inicie um novo shell ou substitua um atual pelo novo:

gnome-terminal -e "sh -c "echo test; sleep 10; exec bash"" 

Comentários

  • # A opção “-e” está obsoleta e pode ser removida em uma versão posterior de gnome-terminal. # # Use “-” para encerrar as opções e coloque a linha de comando para executar depois disso. # Esse erro acontece agora. Mas se você substituir -e por -, o novo terminal que aparece dá um erro. Como usar corretamente -?
  • @ eric.frederich com base esta resposta para uma pergunta em stackoverflow, acredito que a sintaxe deveria ser gnome-terminal -- /bin/sh -c 'echo test; sleep 10'

Resposta

Desde janeiro de 2020, o -e opção em gnome-terminal ainda funciona, mas lança o aviso

# A opção “-e” está obsoleta e pode ser removida em uma versão posterior do gnome-terminal.

# Use “-” para encerrar as opções e colocar a linha de comando para executar depois disso.

Você pode executar os dois comandos sem avisar com

 gnome-terminal -- /bin/sh -c "echo test; sleep 10"  

E, conforme mencionado nesta resposta , se quiser que a janela fique aberta depois, você pode fazer

 gnome-terminal -- /bin/sh -c "echo test; sleep 10; exec bash"  

* resposta t o uma pergunta semelhante

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *