.bashrc
читається лише інтерактивними оболонками. (Насправді, це надмірне спрощення: bash є химерним у цьому відношенні. Bash не читає, .bashrc
чи це оболонка для входу, інтерактивна чи ні. І є виняток навіть виняток: якщо батьківський процес bash є, rshd
або sshd
bash читає .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"
}