.bashrcsolo se lee mediante shells interactivos. (En realidad, eso es una simplificación excesiva: bash es peculiar a este respecto. Bash no lee .bashrcsi es un shell de inicio de sesión, interactivo o no. Y hay una excepción incluso a la excepción: si el proceso padre de bash es rshdo sshd, entonces bash lee .bashrc, ya sea interactivo o no)
Coloque las definiciones de sus funciones en un archivo en un lugar conocido y use el .( sourceincorporado también deletreado ) para incluir ese archivo en un script.
$ cat ~/lib/bash/my_functions.bash
foo () {
…
$ cat ~/bin/myscript
#!/bin/bash
. ~/lib/bash/my_functions.bash
foo bar
Si lo desea, puede seguir la función de carga automática de ksh. Coloque cada definición de función en un archivo con el mismo nombre que la función. Enumere los directorios que contienen las definiciones de funciones en la FPATHvariable (una lista de directorios separados por dos puntos). Aquí hay una aproximación cruda de ksh autoloadque realmente carga la función inmediatamente en lugar de bajo demanda:
autoload () {
set -- "$(set +f; IFS=:;
for d in $FPATH; do
if [ -r "$d/$1" ]; then echo -E "$d/$1"; break; fi;
done)"
[[ -n $1 ]] && . "$1"
}