Ho uno script che viene eseguito in background (senza finestre di terminale o TTY) e occasionalmente fa qualcosa.

Ora voglio che faccia unaltra cosa quando fa qualcosa ed è aprire una finestra di terminale Gnome ed eseguire 2 comandi. In realtà, ho solo bisogno di eseguire 1 comando ma voglio che la finestra del terminale rimanga aperta in modo da poter vedere loutput del comando. Il comando viene stampato sia su stdout che su stderr e il suo output cambia nel tempo, quindi scrivere semplicemente su un file e inviare un qualche tipo di notifica non funzionerebbe molto bene.

Posso ottenere il terminale Gnome su apri una finestra ed esegui 1 comando:

gnome-terminal -e "sleep 10" 

Ho scelto sleep come comando di lunga durata per semplicità. Tuttavia, quando si aggiunge un altro comando, non si apre alcuna finestra di terminale:

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

Qual è la soluzione a questo?

Commenti

Answer

gnome-terminal tratta tutto tra virgolette come un comando, quindi per eseguirne molti consecutivamente è necessario avvia linterprete (di solito una shell) e fai cose al suo interno, ad esempio:

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

A proposito, potresti volere che la finestra rimanga aperta anche dopo che i comandi hanno terminato il loro lavoro, in tal caso basta avviare una nuova shell o sostituire una corrente con quella nuova:

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

Commenti

  • # Lopzione “-e” è obsoleta e potrebbe essere rimossa in una versione successiva di gnome-terminal. # # Usa “-” per terminare le opzioni e inserisci la riga di comando da eseguire dopo. # Questo errore si verifica ora. Ma se sostituisci -e con -, il nuovo terminale che viene visualizzato dà un errore. Come utilizzare correttamente -?
  • @ eric.frederich basato su questa risposta a una domanda su stackoverflow, credo che la sintassi dovrebbe essere gnome-terminal -- /bin/sh -c 'echo test; sleep 10'

Risposta

A partire da gennaio 2020, -e opzione in gnome-terminal funziona ancora, ma genera lavviso

# Lopzione “-e” è deprecata e potrebbe essere rimossa in una versione successiva di gnome-terminal.

# Usa “-” per terminare le opzioni e inserire la riga di comando da eseguire dopo.

Puoi eseguire i due comandi senza preavviso con

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

E, come menzionato in questa risposta , se vuoi che la finestra rimanga aperta in seguito, puoi farlo

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

* risposta t o una domanda simile

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *