2012-11-29 135 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配置文件,但至少它是一個解決方案。 –