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