从脚本调用时找不到.zshrc中定义的函数

时间:2012-11-29 03:50:19

标签: function scripting zsh

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

export MY_VAR="example"

alias my_alias="echo an example"

function say_hello
{
    echo "say hello"
}

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

有关可能发生的事情的任何想法?感谢。

1 个答案:

答案 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 中的