linux - run - ¿Evitar el cierre de gnome-terminal después de la ejecución del script?
ssh remote command (7)
Creé un script bash que abre varios gnome-terminals, se conecta a las computadoras del aula a través de ssh y ejecuta un script.
¿Cómo puedo evitar que el gnome-terminal se cierre después de que se haya terminado el script? Tenga en cuenta que también quiero poder ingresar más comandos en la terminal.
Aquí hay un ejemplo de mi código:
gnome-terminal -e "ssh root@<ip> cd /tmp && ls"
Como entiendo, quiere que gnome-terminal se abra, haga que ejecute algunos comandos, y luego colóquelo en el indicador para que pueda ingresar algunos comandos más. Gnome-terminal no está diseñado para este caso de uso, pero hay soluciones:
Deja que gnome-terminal ejecute bash y dile a bash que ejecute tus comandos y luego ejecuta bash
$ gnome-terminal -e "bash -c /"echo foo; echo bar; exec bash/""
El exec bash
al final es necesario porque bash -c
terminará una vez que se ejecutan los comandos. exec
hace que el proceso en ejecución sea reemplazado por el nuevo proceso, de lo contrario tendrá dos procesos bash en ejecución.
Deje que gnome-terminal ejecute bash con un rcfile
preparado que ejecuta sus comandos
Preparar somercfile
:
source ~/.bashrc
echo foo
echo bar
Entonces corre:
$ gnome-terminal -e "bash --rcfile somercfile"
Deje que gnome-terminal ejecute una secuencia de comandos que ejecuta sus comandos y luego pasa a bash
Preparar scripttobash
:
#!/bin/sh
echo foo
echo bar
exec bash
Establezca este archivo como ejecutable.
Entonces corre:
$ gnome-terminal -e "./scripttobash"
Alternativamente, puede hacer un genericscripttobash
:
#!/bin/sh
for command in "$@"; do
$command
done
exec bash
Entonces corre:
$ gnome-terminal -e "./genericscripttobash /"echo foo/" /"echo bar/""
Cada método tiene sus peculiaridades. Debe elegir, pero elija sabiamente. Me gusta la primera solución por su verbosidad y la sencillez.
Dicho todo esto, esto podría ser útil para ti: http://www.linux.com/archive/feature/151340
Ejecutar con -ic
lugar de -i
para hacer que terminal cierre el proceso bash cuando cierras la interfaz gráfica de usuario de tu terminal:
gnome-terminal -e "bash -ic /"echo foo; echo bar; exec bash/""
Finalmente este funciona para mí:
gnome-terminal --working-directory=WORK_DIR -x bash -c "COMMAND; bash"
La solución ideal sería solicitar una entrada de usuario con eco " Presionar cualquier tecla ".
Pero si hace doble clic en Nautis o Nemo y selecciona ejecutar en un terminal, parece que no funciona.
En el caso de Ubuntu, se usa un shell diseñado para una rápida puesta en marcha y ejecución con solo características estándar, llamado dash, creo. Debido a esto, el shebang es la primera línea para comenzar, para permitir el uso adecuado de las características de bash . Normalmente esto sería: #! / Bin / bash o similar. En Ubuntu, aprendí que esto debería ser: #! / Usr / bin / env bash.
Existen muchas soluciones para mantener presionada la pantalla antes de que el intérprete vea un error de sintaxis en un comando bash.
La solución en Ubuntu que funcionó para mí:
#!/usr/bin/env bash
your code
echo Press a key...
read -n1
Si ejecuta un script bash simplemente agregue gedit afile
al final del script y mantendrá abierto el gnome-terminal. "afile" podría ser un registro de compilación que fue en mi caso.
No intenté solo usar gedit
solo, pero eso funcionaría también.
Use el comando nohup .
nohup gnome-terminal -e "ssh root@ cd /tmp && ls"
Espero que esto te ayudará.
Respuesta de desbordamiento de pila: el terminal se cierra cuando el comando ejecutado dentro de él ha finalizado, por lo que debe escribir un comando que no termine inmediatamente. Por ejemplo, para dejar la ventana de la terminal abierta hasta que presione Enter en ella:
gnome-terminal -e "ssh host ''cd /tmp && ls''; read line"
Respuesta súper usuario : cree un perfil en el que la preferencia "Título y comando / Cuando el comando sale" se establece en "Mantener abierto el terminal". Invoque gnome-terminal con la
--window-with-profile
o--tab-with-profile
para especificar el nombre del terminal.