У меня есть файл bash, src-useful.bash , содержащий полезные функции, такие как say_hello() , расположенный в /path /to / полезно.
В моем ~/.bash_profile я добавил следующие строки:
export BASH_USEFUL=/path/to/useful
source $BASH_USEFUL/src-useful.bash
Открывая новый терминал, я могу проверить следующее:
$ echo $BASH_USEFUL
/path/to/useful
$ cat $BASH_USEFUL/src-useful.bash
function hello() {
    echo "hello!"
}
$ hello
hello!
Я создал скрипт, say_hello.sh:
$ cat say_hello.sh
echo "BASH_USEFUL: $BASH_USEFUL"
hello
$ ./say_hello.sh
BASH_USEFUL: /path/to/useful  # Recognizsed
say_hello.sh: line 2: say_hello: command not found  # Not recognized?
Если я $BASH_USEFUL/src-useful.bash в say_hello.sh он будет работать:
$ cat say_hello.sh
echo "BASH_USEFUL: $BASH_USEFUL"
source $BASH_USEFUL/src-useful
say_hello
$ ./say_hello.sh
BASH_USEFUL: /path/to/useful  # Recognized
hello!  # Function say_hello is now recognized
Я хотел бы знать, почему переменная BASH_USEFUL все еще распознается моим сценарием, а функции из моего исходного файла не могут быть видны в среде моим запущенным сценарием. Есть ли обходной путь, кроме поиска моего src-useful.bash в моих скриптах? Я бы хотел, чтобы функции src-useful.bash загружались в среде любого запускаемого мной скрипта.
