2012-11-29 96 views
0

我已经在我的.zshrc文件中定义了一些变量,别名和函数调用时:从调用时功能从脚本

export MY_VAR="example" 

alias my_alias="echo an example" 

function say_hello 
{ 
    echo "say hello" 
} 

我已经验证,所有这三个定义和诸如此类的东西终点站。但是,当我尝试从另一个脚本(它本身是从同一个终端调用的)调用函数say_hello时,函数似乎没有被定义。我看到'command not found'错误。从其他脚本引用时,别名和变量MY_VAR看起来很好定义。

关于可能会发生什么的任何想法?谢谢。

+0

你如何执行其他脚本?那另一个脚本中的第一行是什么(意思是它实际上使用zsh而不是像'#!/ bin/sh'中的bash)? –

回答

3

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

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

注意:将这些函数放入.zshenv文件是不好主意,因为它会创建隐含的依赖关系。您应该使用脚本库,而不是:把它放到

~/.zsh/say_hello.zsh 

,并在你的脚本和.zshrc都做

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

+0

啊这是问题所在。谢谢。有点傻,我还需要第三个shell配置文件,但至少它是一个解决方案。 –