¿Cómo ejecutar un script sin cerrar el terminal?

69

Tengo un script en el archivo bla.shy es ejecutable. Cuando hago clic en él, el script se ejecuta y la ventana se cierra. Me gustaría que la ventana permanezca abierta .

Algo así como un comando cmd /k** commanden Windows.

PD: no quiero usar pause, pero quiero poder escribir más comandos después de ejecutar el script.

Adaptador UA
fuente

Respuestas:

81

Ponga $SHELLal final de su script:

texto alternativo

Un pequeño defecto: dado gnome-terminalque no está ejecutando el bashshell, lo considerará como una aplicación y mostrará una advertencia al intentar cerrar el terminal:

There is still a process running in this terminal
Closing the terminal will kill it.

No he encontrado una buena manera de ocultar esta advertencia. Si lo desea, puede deshabilitarlo por completo ejecutando:

gconftool --set /apps/gnome-terminal/global/confirm_window_close --type boolean false

Esto no sucede si está usando en xtermlugar de gnome-terminal; Debería molestarte.

Stefano Palazzo
fuente
20
Puede usar en exec $SHELLlugar de solo $SHELLhacer que la advertencia desaparezca sin cambiar la configuración.
Andrea Corbellini
1
Pero esta solución crea un shell / proceso adicional. ¿Se puede evitar esto?
lucasvc
No sé de una manera de hacer esto, no. El problema es que pierdes tu control sobre IO estándar una vez que finaliza el primer proceso de bash, por lo que deberías hacer algunos trucos con un demonio que pasa estos controles, lo que sería más propenso a errores y molesto.
Stefano Palazzo
10

Usando Terminal Gnome

Usar gnome-terminal appending; bash al final de la cadena de comando y llamar al script con la opción -c funciona. Por ejemplo:

gnome-terminal -e "bash -c ~/script.sh;bash"

Esto hace lo siguiente:

  1. abre gnome-terminal
  2. ejecuta el script script.sh
  3. muestra el indicador de bash después de que el script haya finalizado.

Puede salir de la ventana gnome-terminal cerrando la ventana o escriba exit en el indicador bash. O puede escribir más comandos según lo solicitado.

Karsvo
fuente
7

Si tiene acceso al script, también puede agregar el siguiente código al final:

read

Ese código esperará una entrada antes de cerrar, por lo que el terminal permanecerá abierto hasta que presione Entrar.

Jaycode
fuente
1
A menudo lo uso bashal final, pero readme permite cerrar la ventana solo con ctrl+co enter, en lugar de ctrl+shift+wo alt+f4. Esto es conveniente cuando itera rápidamente en su secuencia de comandos.
hsandt
5

Use bashla --init-fileopción con una tubería temporal:

bash --init-file <(echo './<script_name>')

Ex:

bash --init-file <(echo './bla.sh')
Prem Anand
fuente
2

Usar xtermy agregar ;bashal final de la cadena de comando funciona. Por ejemplo:

xterm -e "bash ~/script.sh;bash"

Esto hace lo siguiente:

  1. abre xterm
  2. ejecuta el script script.sh
  3. muestra el indicador de bash después de que el script haya finalizado.

Puede salir de la ventana de xterm cerrando la ventana o escribiendo exiten el indicador de bash. O puede escribir más comandos según lo solicitado.

Karsvo
fuente
1
xterm -e bash --rcfile bla.sh

Esto ejecutará el script en una nueva ventana e incluso le dará el control de la ventana una vez que haya terminado.

Sin embargo, la nueva ventana no se cargará ~/.bashrcnormalmente, ya que ejecutamos en su bla.shlugar. Esto puede remediarse poniendo

. ~/.bashrc

en la cima de bla.sh

Steven Penny
fuente