Как определить глобальные функции в zsh (macOS), которые доступны в скриптах?

Как определить глобальные функции в zsh (macOS), которые доступны в скриптах?

Начиная с 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?

Связанный контент