.bashrc
chỉ được đọc bởi các vỏ tương tác. (Trên thực tế, đó là một sự đơn giản hóa: bash là kỳ quặc trong lĩnh vực này Bash không đọc. .bashrc
Nếu đó là một vỏ đăng nhập, tương tác hay không Và có một ngoại lệ thậm chí đến ngoại lệ:. Nếu quá trình cha mẹ bash là rshd
hay sshd
, sau đó bash không đọc .bashrc
, cho dù đó là tương tác hay không.)
Đặt định nghĩa hàm của bạn vào một tệp ở một nơi đã biết và sử dụng nội dung .
(cũng được đánh vần source
) để đưa tệp đó vào tập lệnh.
$ cat ~/lib/bash/my_functions.bash
foo () {
…
$ cat ~/bin/myscript
#!/bin/bash
. ~/lib/bash/my_functions.bash
foo bar
Nếu bạn muốn, bạn có thể làm theo tính năng tự động tải của ksh. Đặt từng định nghĩa hàm trong một tệp có cùng tên với hàm. Liệt kê các thư mục chứa các định nghĩa hàm trong FPATH
biến (danh sách các thư mục được phân tách bằng dấu hai chấm). Đây là một xấp xỉ thô của ksh's autoload
thực sự tải chức năng ngay lập tức thay vì theo yêu cầu:
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"
}