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
- Relacionado: askubuntu.com/questions/315408/… e askubuntu.com/questions/20330/…
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"