Estoy leyendo esta publicación sobre el uso de funciones en variables bash shell. Observo que para usar funciones de shell, uno tiene que exportarlas y ejecutarlas en un shell secundario de la siguiente manera:
$ export foo='() { echo "Inside function"; }'
$ bash -c 'foo'
Inside function
Quiero preguntar si es posible que las funciones se definan en las variables bash shell de modo que puedan ejecutarse en el shell actual sin usar exportar y ejecutar un nuevo shell.
Respuesta aceptada:
No, no puedes.
Si desea usar una función en el shell actual, simplemente defínala y luego úsela más tarde:
$ foo() { echo "Inside function"; }
$ foo
Inside function
Antes del día de Shellshock, puede almacenar la función dentro de una variable, exportar la variable y usar la función en el sub-shell, porque bash
apoyar la función de exportación, bash
pondrá la definición de la función en la variable de entorno como:
foo=() {
echo "Inside function"
}
luego interprete la función reemplazando =
con espacio No hay intención de poner la función en la variable y hacer referencia a la variable que ejecutará la función.
Ahora, después de que Stéphane Chazelas encontró el error, esa característica se eliminó, ya no se almacenó ninguna definición de función en la variable de entorno simple. Ahora las funciones exportadas se codificarán agregando el prefijo BASH_FUNC_
y sufijo %%
para evitar conflictos con las variables de entorno. bash
El intérprete ahora puede determinar si son funciones de shell o no, independientemente del contenido de las variables. También necesita definir la función y exportarla explícitamente para usarla en sub-shell:
$ foo() { echo "Inside function"; }
$ export -f foo
$ bash -c foo
Inside function
De todos modos, si su ejemplo funcionó con su actual bash
, entonces estás usando una versión vulnerable.