.bashrcé lido apenas por conchas interativas. (Na verdade, isso é uma simplificação excessiva: o bash é peculiar a esse respeito. O Bash não lê .bashrcse é um shell de logon, interativo ou não. E há uma exceção até a exceção: se o processo pai do bash for rshdor sshd, então o bash lê .bashrc, seja interativo ou não.)
Coloque suas definições de função em um arquivo em um local conhecido e use o .(também escrito source) para incluir esse arquivo em um script.
$ cat ~/lib/bash/my_functions.bash
foo () {
…
$ cat ~/bin/myscript
#!/bin/bash
. ~/lib/bash/my_functions.bash
foo bar
Se desejar, você pode seguir o recurso de carregamento automático do ksh. Coloque cada definição de função em um arquivo com o mesmo nome que a função. Liste os diretórios que contêm as definições de função na FPATHvariável (uma lista de diretórios separados por dois pontos). Aqui está uma aproximação grosseira do ksh, autoloadque realmente carrega a função imediatamente, em vez de sob 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"
}