with script run remote password example and linux bash shell ssh

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.