我在.zshrc文件中定义了一些变量,别名和函数:
export MY_VAR="example"
alias my_alias="echo an example"
function say_hello
{
echo "say hello"
}
我已经验证了从终端调用所有三个都是定义的。但是,当我尝试从另一个脚本调用函数say_hello(它本身是从同一个终端调用)时,似乎没有定义该函数。我看到'命令未找到'错误。当从其他脚本引用时,别名和变量MY_VAR似乎被定义得很好。
有关可能发生的事情的任何想法?感谢。
答案 0 :(得分:3)
当从终端调用zsh时,它以交互模式调用,导致zsh获取其他配置文件,包括$ZDOTDIR/.zshrc
($HOME/.zshrc
)。默认情况下(在非登录shell中处于非交互模式),它仅提供/etc/zsh/zshenv
*和$ZDOTDIR/.zshenv
($ZDOTDIR
大部分时间$HOME
)文件,请参阅最后一页名为man zsh
的{{1}}的两个部分。我不知道为什么定义了别名(你究竟是怎么检查的?),但MY_VAR是在脚本中定义的,因为你导出了它。
* STARTUP/SHUTDOWN FILES
根据doc,很可能是zsh包的Gentoo维护者将其更改为/etc/zshenv
。
注意:将这些函数放入/etc/zsh/zshenv
文件中是不明智的,因为它会创建隐式依赖项。您应该使用脚本库:将其放入
.zshenv
并做
~/.zsh/say_hello.zsh
您的脚本和source ${ZDOTDIR-$HOME}/.zsh/say_hello.zsh
中的。