Saltar al contenido

Diferencia entre retorno y salida en funciones Bash

Solución:

De man bash sobre return [n];

Hace que una función deje de ejecutarse y devuelva el valor especificado por n a su llamador. Si se omite n, el estado de retorno es el del último comando ejecutado en el cuerpo de la función.

… sobre exit [n]:

Hacer que el shell salga con un estado de n. Si se omite n, el estado de salida es el del último comando ejecutado. Se ejecuta una trampa en EXIT antes de que termine el shell.

EDITAR:

Según su edición de la pregunta, con respecto a los códigos de salida, return no tiene nada que ver con los códigos de salida. Los códigos de salida están destinados a aplicaciones / scripts, no funciones. Entonces, en este sentido, la única palabra clave que establece el código de salida del script (el que puede ser capturado por el programa que llama usando el $? variable de shell) es exit.

EDITAR 2:

Mi última declaración refiriéndose exit está provocando algunos comentarios. Fue hecho para diferenciar return y exit para la comprensión del PO, y de hecho, en alguna punto dado de un programa / script de shell, exit es la única forma de finalizar el script con un código de salida al proceso de llamada.

Cada comando ejecutado en el shell produce un “código de salida” local: establece el $? variable a ese código, y se puede utilizar con if, && y otros operadores para ejecutar condicionalmente otros comandos.

Estos códigos de salida (y el valor de la $? variable) se restablecen con cada ejecución de comando.

Por cierto, el código de salida del último comando ejecutado por el script se utiliza como código de salida del propio script tal como lo ve el proceso de llamada.

Finalmente, las funciones, cuando se llaman, actúan como comandos de shell con respecto a los códigos de salida. El código de salida de la función (dentro de la función) se establece utilizando return. Entonces cuando en una función return 0 se ejecuta, la ejecución de la función termina, dando un código de salida de 0.

return hará que la función actual quede fuera de alcance, mientras que exit hará que el script termine en el punto en el que se llama. Aquí hay un programa de muestra para ayudar a explicar esto:

#!/bin/bash

retfunc()
{
    echo "this is retfunc()"
    return 1
}

exitfunc()
{
    echo "this is exitfunc()"
    exit 1
}

retfunc
echo "We are still here"
exitfunc
echo "We will never see this"

Producción

$ ./test.sh
this is retfunc()
We are still here
this is exitfunc()

No creo que nadie haya respondido completamente la pregunta porque no describen cómo se usan los dos. OK, creo que lo sabemos Salida mata el script, donde sea que se llame y puede asignarle un estado, como salir o salir 0 o salir 7 y así sucesivamente. Esto se puede utilizar para determinar cómo se obligó a detener el script si lo llamaba otro script, etc. Salida.

regreso, cuando se llama, devolverá el valor especificado para indicar el comportamiento de la función, generalmente un 1 o un 0. Por ejemplo:

    #!/bin/bash
    isdirectory() {
      if [ -d "$1" ]
      then
        return 0
      else
        return 1
      fi
    echo "you will not see anything after the return like this text"
    }

Marque así:

    if isdirectory $1; then echo "is directory"; else echo "not a directory"; fi

O así:

    isdirectory || echo "not a directory"

En este ejemplo, la prueba se puede utilizar para indicar si se encontró el directorio. Observe que cualquier cosa después de la regreso no se ejecutará en la función. 0 es verdadero, pero falso es 1 en el shell, diferente de otros lenguajes de programación.

Para obtener más información sobre las funciones: Devolver valores de funciones Bash

Nota: Los isdirectory La función es solo para fines instructivos. Esta no debería ser la forma en que realiza una opción de este tipo en un script real. *

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *