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

Function 从脚本调用时,找不到.zshrc中定义的函数,function,scripting,zsh,Function,Scripting,Zsh,我在.zshrc文件中定义了一些变量、别名和函数: export MY_VAR="example" alias my_alias="echo an example" function say_hello { echo "say hello" } 我已经验证了当从终端调用时,所有三个都已定义。但是,当我尝试从另一个脚本调用函数say_hello(它本身是从同一个终端调用的)时,该函数似乎没有定义。我看到“未找到命令”错误。从另一个脚本引用别名和变量MY_VAR时,其定义似乎很好 对可

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

export MY_VAR="example"

alias my_alias="echo an example"

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


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

当从终端调用zsh时,会以交互模式调用它,从而导致zsh生成其他配置文件,包括
$ZDOTDIR/.zshrc
$HOME/.zshrc
)。默认情况下(在非登录shell中的非交互模式下),它仅源于
/etc/zsh/zshenv
*和
$ZDOTDIR/.zshenv
$ZDOTDIR
大多数情况下是
$HOME
)文件,请参阅
man zsh
的最后两部分,命名为
启动/关闭文件。我不知道为什么要定义别名(您到底是如何检查的?),但我的变量是在脚本中定义的,因为您导出了它

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

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

~/.zsh/say_hello.zsh

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

在脚本和
.zshrc
中,当从终端调用zsh时,会以交互模式调用它,从而使zsh获取其他配置文件,包括
$ZDOTDIR/.zshrc
$HOME/.zshrc
)。默认情况下(在非登录shell中的非交互模式下),它仅源于
/etc/zsh/zshenv
*和
$ZDOTDIR/.zshenv
$ZDOTDIR
大多数情况下是
$HOME
)文件,请参阅
man zsh
的最后两部分,命名为
启动/关闭文件。我不知道为什么要定义别名(您到底是如何检查的?),但我的变量是在脚本中定义的,因为您导出了它

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

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

~/.zsh/say_hello.zsh

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

在您的脚本和
.zshrc

中,如何执行其他脚本?另一个脚本中的第一行是什么(意思是它实际上使用zsh而不是bash via
!/bin/sh
)?如何执行另一个脚本?另一个脚本的第一行是什么(意思是它实际上使用zsh而不是bash via
!/bin/sh
)?啊,这就是问题所在。谢谢我还需要第三个shell配置文件,这有点傻,但至少它是一个解决方案。这是如何解决您的问题的,为什么?我觉得这个解释不够清楚。导致函数定义无法定义的确切问题是什么?啊,这就是问题所在。谢谢我还需要第三个shell配置文件,这有点傻,但至少它是一个解决方案。这是如何解决您的问题的,为什么?我觉得这个解释不够清楚。导致函数定义无法定义的确切问题是什么?