.bashrcчитається лише інтерактивними оболонками. (Насправді, це надмірне спрощення: bash є химерним у цьому відношенні. Bash не читає, .bashrcчи це оболонка для входу, інтерактивна чи ні. І є виняток навіть виняток: якщо батьківський процес bash є, rshdабо sshdbash читає .bashrc, будь то інтерактивна чи ні.)
Помістіть визначення своїх функцій у файл у відомому місці та використовуйте .(також написаний source) вбудований файл, щоб включити цей файл у сценарій.
$ cat ~/lib/bash/my_functions.bash
foo () {
…
$ cat ~/bin/myscript
#!/bin/bash
. ~/lib/bash/my_functions.bash
foo bar
Якщо ви хочете, ви можете скористатися функцією автозавантаження ksh. Покладіть кожне визначення функції у файл з тим же ім'ям, що і функція. Перерахуйте каталоги, що містять визначення функцій у FPATHзмінній (список розділених двокрапкою точок). Ось грубе наближення ksh, autoloadяке фактично завантажує функцію одразу замість запиту:
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"
}