Начиная с macOS 10.15 (Catalina) оболочка по умолчанию изменилась с bash на zsh. Одна из проблем, с которой я сталкиваюсь, заключается в том, что я не могу заставить работать свои собственные глобальные функции. Раньше я экспортировал их из .bash_profile, но zsh, похоже, не знает концепцию экспорта функций.
Допустим, у меня есть это:
function greet { echo "Hello $1, how are you today" }
Если я затем запущу hello RocketNuts
оболочку, то он скажет Hello RocketNuts, how are you today
. Пока все хорошо.
Теперь я хочу сделать эту функцию глобальной.так что это также доступно в скриптах.
Я пытался:
- положить его в
.zshrc
- положить его в
.zshenv
Я также попробовал создать подкаталог ~/myfunctions
и файл с именем, ~/myfunctions/greet
который содержит:
function greet { echo "Hello $1, how are you today" }
greet "$@"
и затем в « ~/.zshrc
или» ~/.zshenv
я добавляю:
fpath=( ~/myfunctions "${fpath[@]}" )
autoload -Uz greet
Однако ни один из этих методов не делает greet
функцию доступной в скриптах.
Из оболочки они все работают нормально. С любым из методов я могу вызвать greet
функцию вручную в оболочке.
Но если у меня есть файл test.sh
, который это делает greet Somebody
, и я его запускаю, он всегда говорит: «Greet: команда не найдена».
Как заставить это работать в zsh?