.bashrc
é lido apenas por conchas interativas. (Na verdade, isso é uma simplificação excessiva: o bash é peculiar a esse respeito. O Bash não lê .bashrc
se é um shell de logon, interativo ou não. E há uma exceção até a exceção: se o processo pai do bash for rshd
or 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 FPATH
variável (uma lista de diretórios separados por dois pontos). Aqui está uma aproximação grosseira do ksh, autoload
que 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"
}