variable una tipos signo para las guardar funciones entorno crear configuran como comando cadena asignar shell export

tipos - Exportar una función en shell



signo/en bash (6)

En sh , no es posible exportar una función, como notó Charles Duffy .

Dígame cómo exportar una función en el shell principal (bash, sh o ksh) para que la función esté disponible para todo el proceso secundario iniciado desde el proceso principal.


Las funciones no son exportables por naturaleza. Sin embargo, puede exportar cadenas, así que tengo un pequeño truco aquí:

func="$(typeset -f funcname)" export func

Para importar la función, redefinirla de la cadena exportada:

# in subshell eval "$func"


Si crea subcapas con ( ) , heredarán una instantánea de todas las definiciones, parámetros y variables de shell.

Si los ejecuta como programas, puede poner las definiciones en .bashrc .

Si intenta falsificar un script existente para ejecutar un contenedor o sustituir un comando PATH, entonces .bashrc funcionará dependiendo de los detalles de la ejecución. De lo contrario, podría ejecutar un script de envoltura que simplemente haga a . o source de un archivo de inclusión que define las funciones y luego hace lo mismo con el script de shell con los comandos que se van a sustituir.

El script de envoltura puede ser algo así como:

script=$1 shift . include.sh . $script "$@"

La idea es que el primer parámetro es el nombre de la secuencia de comandos real y los parámetros restantes son los argumentos, luego se ejecuta la secuencia de comandos anterior.


Si está usando ksh o zsh:

Puede usar la variable de entorno FPATH , donde puede colocar todas sus funciones.

Si FPATH se establece en un intérprete interactivo, y no se encuentra un comando o función en el entorno de shell actual o en la PATH , se busca en los directorios allí enumerados la existencia de un archivo con el nombre del comando faltante. Si se encuentra uno, se origina en el entorno de shell actual y se espera que defina la función.

Por lo tanto, puede colocar todas sus funciones en una ubicación en FPATH , y los scripts secundarios también podrán encontrarla.

Puede usar el comando autoload en scripts de shell para cargar las funciones que necesita:

autoload fun_a fun_b

En zsh, se requiere autoload para que FPATH funcione. En ksh y sus parientes cercanos, creo que simplemente hace que las funciones definidas en FPATH anulen el comando regular en tu RUTA, como lo harían si se definieran directamente.

Algunos detalles sobre FPATH y autoload :


La función de export -f es específica de Bash:

padre

#!/bin/bash plus1 () { echo $(($1 + 1)); } echo $(plus1 8) export -f plus1 ./child 14 21

niño

#!/bin/bash echo $(plus1 $(($1 * $2)) )


declare -x -f NAME

Más información

-f restrict action or display to function names and definitions -x to make NAMEs export