GNU/Linux >> Tutoriales Linux >  >> Linux

Cualquier forma de salir del script bash, pero sin salir de la terminal

Sí; puedes usar return en lugar de exit . Su propósito principal es regresar desde una función de shell, pero si lo usa dentro de un source -d script, regresa de ese script.

Como §4.1 "Bourne Shell Builtins" del Manual de referencia de Bash lo pone:

     return [n]

Hacer que una función de shell salga con el valor de retorno n .Si n no se proporciona, el valor devuelto es el estado de salida del último comando ejecutado en la función. Esto también se puede usar para terminar la ejecución de un script que se está ejecutando con el . (o source ) integrado, devolviendo n o el estado de salida del último comando ejecutado dentro del script como el estado de salida del script. Cualquier comando asociado con el RETURN trap se ejecuta antes de que la ejecución se reanude después de la función o secuencia de comandos. El estado de retorno es distinto de cero si return se usa fuera de una función y no durante la ejecución de un script por . o source .


En lugar de ejecutar el script usando . run2.sh , puedes ejecutarlo usando sh run2.sh o bash run2.sh

Se iniciará un nuevo sub-shell, para ejecutar el script entonces, se cerrará al final del script dejando el otro shell abierto.


El "problema" realmente es que está obteniendo y no ejecutando el script. Cuando obtiene un archivo, su contenido se ejecutará en el shell actual, en lugar de generar un subshell. Así que todo, incluida la salida, afectará al shell actual.

En lugar de usar exit , querrá usar return .


Puede agregar un comando de salida adicional después de la declaración/comando de retorno para que funcione para ambos, ejecutando el script desde la línea de comando y aprovisionándose desde la terminal.

Ejemplo de código de salida en el script:

   if [ $# -lt 2 ]; then
     echo "Needs at least two arguments"
     return 1 2>/dev/null
     exit 1
   fi

La línea con el exit el comando no se llamará cuando obtenga el script después del return comando.

Cuando ejecuta el script, return comando da un error. Entonces, suprimimos el mensaje de error reenviándolo a /dev/null .


Linux
  1. ¿La forma "adecuada" de probar si un servicio se está ejecutando en un script?

  2. ¿Cómo detener el script Loop Bash en la terminal?

  3. ¿Por qué el script de Bash no se cierra después de la ejecución?

  4. Obtener todos los archivos excepto los archivos en matriz:¿Bash?

  5. Bash:¿Por qué la secuencia de comandos principal no termina en SIGINT cuando la secuencia de comandos secundaria atrapa a SIGINT?

¿Por qué este "mientras se lee" funciona en una terminal, pero no en un script de Shell?

Bash + ¿Cómo salir del script secundario y del script principal en ambas ocasiones?

¿Cuál es la mejor manera de garantizar que solo se ejecute una instancia de un script Bash?

Cómo obtener el estado de salida de un bucle en bash

Variable de entorno TERM no establecida

Compruebe si alguno de los parámetros de un script bash coincide con una cadena