0

我在 .zshrc 文件中定义了一些变量、别名和函数:

export MY_VAR="example"

alias my_alias="echo an example"

function say_hello
{
    echo "say hello"
}

我已经验证了所有三个都已定义,并且在从终端调用时都没有。但是,当我尝试从另一个脚本(它本身是从同一个终端调用)调用函数 say_hello 时,该函数似乎没有被定义。我看到“找不到命令”错误。当从这个其他脚本引用时,别名和变量 MY_VAR 似乎定义得很好。

关于可能发生的事情有什么想法吗?谢谢。

4

1 回答 1

3

当从终端调用 zsh 时,它会以交互模式调用,这会导致 zsh 获取其他配置文件,包括$ZDOTDIR/.zshrc( $HOME/.zshrc)。默认情况下(在非登录 shell 中的非交互模式下)它只获取/etc/zsh/zshenv* 和$ZDOTDIR/.zshenv$ZDOTDIR大部分时间$HOME)文件,请参阅最后但两个部分man zshnamed STARTUP/SHUTDOWN FILES。我不知道为什么要定义别名(您到底是如何检查的?),但是 MY_VAR 是在脚本中定义的,因为您导出了它。

*/etc/zshenv根据文档,很可能他们是 zsh 包的 Gentoo 维护者,将其更改为/etc/zsh/zshenv.

注意:将此类函数放入.zshenv文件中是个坏主意,因为它会创建隐式依赖关系。您应该改用脚本库:将其放入

~/.zsh/say_hello.zsh

source ${ZDOTDIR-$HOME}/.zsh/say_hello.zsh

在您的脚本和.zshrc.

于 2012-11-29T15:37:00.763 回答