自 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 中工作?