zsh PATH 變數未從另一個環境變數正確設置
我想根據某個目錄設置我的路徑(和其他一些環境變數),所以我的主目錄中有以下文件
export MY_DIR="/path/to/dir" export PATH=$MY_DIR/bin:$PATH export MY_OTHER_VAR="$MY_DIR/folder"
我在我的 ~/.zshrc 中使用以下行來獲取它:
[[ -e ~/my_file.sh ]] && emulate sh -c ' source ~/my_file.sh
但是,當我登錄時,
$MY_DIR/bin
不在我的路徑中。如果我echo $PATH
,我應該在%F{51}~%f
哪裡。$MY_DIR/bin
但是,MY_DIR 和 MY_OTHER_VAR 都設置正確。我做錯了什麼,或者這是 zsh 中的一些奇怪的錯誤(它似乎與 bash 一樣工作)?
編輯
我在沒有問題的情況下使用了這兩個
source
和~
其他地方。zshrc
但是,我嘗試將文件移動/etc/zsh/my_file.sh
到etc/zsh/zprofile
. 我也嘗試使用.
而不是源,但即使進行了這些更改,我仍然%F{51}~%f
在我的路徑變數中看到相同的內容。實際上,我注意到我在 PATH 變數中看到了我目前目錄的任何內容,例如,如果我導航到/etc/zsh/
andecho $PATH
,我會看到%F{51}/etc/zsh%f
.完整的程式碼重現:
/etc/zsh/zprofile
:[[ -e /etc/zsh/my_file.sh ]] && emulate sh -c ' . /etc/zsh/my_file.sh'
/etc/zsh/my_file.sh
:export MY_DIR="/home/matt/code" export PATH="$MY_DIR/bin:$PATH" export MY_PYTHON="$MY_DIR/python"
編輯 2
所以我使用了一個自定義提示,它以青色列印我目前的路徑。如果我禁用該提示,我的 PATH 變數會正確設置。在提示的腳本中,我使用了一個我呼叫的變數
path
(小寫)。顯然,雖然 bash 不會將其與 混淆,但PATH
zsh 會。感謝大家的幫助。
我的問題實際上不在我試圖設置路徑的程式碼中
"$MY_DIR/bin:$PATH"
,而是在我在我的.zshrc
. 我正在使用自定義腳本來設置我的 shell 提示符,其中我使用了聲明為的變數path
,認為這不會與環境變數衝突,但是,正如@AdaephonPATH
在評論中指出的那樣,zsh將關鍵字與.path``PATH
因此,對我來說,解決方案是將我的提示函式中的變數重命名為
cur_path
(或類似的)。嘗試將變數定義為local path
將導致 segfault。