如何在 zsh (macOS) 中定义脚本中可用的全局函数?

如何在 zsh (macOS) 中定义脚本中可用的全局函数?

自 macOS 10.15 (Catalina) 起,默认 shell 已从 bash 更改为 zsh。我遇到的事情之一是我无法让自己的全局函数正常工作。我曾经从 .bash_profile 导出这些,但 zsh 似乎不知道导出函数的概念。

假设我有这个:

function greet { echo "Hello $1, how are you today" }

如果我随后hello RocketNuts在 shell 上运行,它会显示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在 shell 上手动调用该函数。

test.sh但是,如果我有一个执行该操作并运行该文件的文件greet Somebody,它总是显示“问候:找不到命令”。

我如何让它在 zsh 中工作?

相关内容