Puedes usar .exec ./your-script
Un emulador de terminal como GNOME Terminal se cierra cuando el proceso inicial que se ejecuta dentro de él, que generalmente es un shell, se cierra.
Si ya está en un terminal y lo único que desea hacer antes de salir de ese terminal es ejecutar un script (o programa) en particular, entonces esto significa que ya no necesita realmente el shell que se está ejecutando en él. Por lo tanto, puede usar la función exec
integrada del shell para hacer que el shell se reemplace con el proceso creado por su comando.
- En el caso de su script, ese es otro proceso de shell, tal como se crea un segundo proceso de shell cuando ejecuta un script sin él
exec
.
La sintaxis es , por ejemplo, .exec command
exec ./your-script
exec
: un ejemplo
Por ejemplo, supongamos que tengo un script de shell llamado count
, ejecutable marcado y ubicado en el directorio actual. Contiene:
#!/usr/bin/env bash
for i in {5..1}; do echo $i; sleep 1; done
Y, en una terminal, ejecuto:
exec ./count
Esto imprime los números 5
, 4
, 3
, 2
, y 1
, uno por segundo, y entonces se cierra la ventana de terminal.
Si ejecuta esto desde algo que no sea el primer proceso ejecutado en su terminal, por ejemplo, si ejecutó bash
primero para iniciar otra instancia de shell, esto lo lleva de regreso al shell que creó ese proceso, en lugar de salir de la terminal. (Esta advertencia se aplica igualmente a los exit
métodos basados).
Puedes usar ../your-script; exit
Si no desea decirle a su shell que se reemplace con el nuevo proceso (vía exec
), puede decirle que se quede pero se cierre inmediatamente después de que finalice el nuevo proceso.
Para hacer esto, ejecute su comando y el exit
comando, separados por ;
para que se puedan dar en una línea.
La sintaxis es command; exit
, por ejemplo, ../your-script; exit
command; exit
vs. command && exit
Puede notar que esto se parece al método sugerido en las respuestas de kos y heemayl . La diferencia es que:./your-script && exit
&&
ejecuta el segundo comando solo si el primer comando informó que tuvo éxito al devolver un código de salida de cero.
;
ejecuta el segundo comando independientemente de si el primer comando informó o no de éxito.
Cuál desea depende de la situación específica. Si el comando falla, ¿desea que el shell de llamada (y el terminal de alojamiento) permanezcan activos? Si es así, use &&
; si no, úselo ;
.
También existe command || exit
, que sale del shell de llamada solo si se command
informa un error .