.bashrc
solo se lee mediante shells interactivos. (En realidad, eso es una simplificación excesiva: bash es peculiar a este respecto. Bash no lee .bashrc
si 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 rshd
o 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 .
( source
incorporado 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 FPATH
variable (una lista de directorios separados por dos puntos). Aquí hay una aproximación cruda de ksh autoload
que 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"
}