
Primero, la pregunta: ¿Cómo puedo advertir al usuario que se está ejecutando un script cuando el usuario hace clic en el botón de cerrar y el terminal en sí (y el proceso que se ejecuta en él) se inició desde la línea de comando?
Tengo un script que realiza acciones que el usuario querrá revertir antes de que finalice el script. Hay una declaración de lectura que pausa el proceso hasta que el usuario presiona [enter]. Sin embargo, un usuario desafortunado ocasionalmente hará clic en el botón de cerrar [x] en la esquina superior derecha. No he encontrado una trampa que atrape el botón de cerrar, pero una advertencia bastará. El terminal gnome proporciona la advertencia necesaria.
Pero, cuando gnome-terminal se inicia desde un script (por ejemplo, una acción personalizada de Thunar), la función no funciona. Para aclarar, considere el guión:
gnome-terminal --command="sh readx.sh"
Donde readx.sh contiene una sola línea: leer x
Al hacer clic en el botón [x] superior derecho, una terminal iniciada de esta manera se cierra sin previo aviso mientras el script aún está activo.
Cualquier método de captura o advertencia funcionará para mí.
Respuesta1
¡Sí! Incluir un mensaje de zenity funciona bien para mí. Cuando el script se ejecuta con nohup y se incluye un mensaje de zenity, el hilo se bloqueará según se desee.
Respuesta2
De hecho, puede desconectar su proceso de ejecución readx.sh
desde la ventana de la terminal, por lo que incluso si cierra la ventana de gnome-terminal, continuará ejecutándose en segundo plano y completará lo que debería hacer. Para hacer esto, debe usar nohup
el comando: desconecta el proceso de la terminal, redirige su salida a nohup.out y lo protege de SIGHUP
.
Lo probé con el siguiente comando: gnome-terminal -e "nohup bash ./123.sh"
El script 123.sh
contiene sólo archivos sleep 7 && ls -a > 1.txt
. Entonces, cuando ejecuto el comando anterior y cierro la ventana de gnome-terminal, de todos modos se crea el archivo 1.txt.
Respuesta3
Probé este comando para resolver el problema.
Exec=mate-terminal -e "bash -i -c 'ssh my.server';bash"
Este comando se acaba de probar en mate-terminal
, no en gnome-terminal
.
Mi mate-terminal
versión es 1.16.3 en CentOS7.