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

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"  

* respuesta t o una pregunta similar

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *