Tengo un script que se ejecuta en segundo plano (sin ventanas de terminal o TTY) y ocasionalmente hace algo.
Ahora quiero que haga otra cosa cuando hace algo y es abrir una ventana de Terminal Gnome y ejecutar 2 comandos. En realidad, solo necesito ejecutar 1 comando, pero quiero que la ventana de la terminal permanezca abierta para poder ver el resultado del comando. El comando imprime tanto en stdout como en stderr y su salida cambia con el tiempo, por lo que escribirlo en un archivo y enviar algún tipo de notificación no funcionaría muy bien.
Puedo hacer que Gnome Terminal abra una ventana y ejecute 1 comando:
gnome-terminal -e "sleep 10"
Elegí sleep
como el comando de larga duración por simplicidad. Sin embargo, al agregar otro comando, no se abre ninguna ventana de terminal:
gnome-terminal -e "echo test; sleep 10"
¿Cuál es la solución a esto?
Comentarios
- Relacionado: askubuntu.com/questions/315408/… y askubuntu.com/questions/20330/…
Answer
gnome-terminal
trata todo entre comillas como un solo comando, por lo que para ejecutar muchos de ellos consecutivamente es necesario inicie el intérprete (generalmente un shell) y haga cosas dentro de él, por ejemplo:
gnome-terminal -e "sh -c "echo test; sleep 10""
Por cierto, es posible que desee que la ventana permanezca abierta incluso después de que los comandos terminen su trabajo, en tal caso, simplemente inicie un nuevo shell o reemplace un actual con el nuevo:
gnome-terminal -e "sh -c "echo test; sleep 10; exec bash""
Comentarios
- # La opción “-e” está obsoleta y podría eliminarse en una versión posterior de gnome-terminal. # # Use “-” para terminar las opciones y poner la línea de comando para ejecutar después de él. # Ese error ocurre ahora. Pero si reemplaza -e por -, el nuevo terminal que aparece da un error. ¿Cómo usar correctamente -?
- @ eric.frederich basado en esta respuesta a una pregunta en stackoverflow, creo que la sintaxis debería ser
gnome-terminal -- /bin/sh -c 'echo test; sleep 10'
Respuesta
A partir de enero de 2020, el -e
opción en gnome-terminal
todavía funciona, pero arroja la advertencia
# La opción “-e” está obsoleta y podría eliminarse en una versión posterior de gnome-terminal.
# Use “-” para terminar las opciones y poner la línea de comando para ejecutar después de ella.
Puede ejecutar los dos comandos sin previo aviso con
gnome-terminal -- /bin/sh -c "echo test; sleep 10"
Y, como se menciona en esta respuesta , si desea que la ventana permanezca abierta después, puede hacerlo
gnome-terminal -- /bin/sh -c "echo test; sleep 10; exec bash"