Zsh

zsh PATH 變數未從另一個環境變數正確設置

  • June 14, 2018

我想根據某個目錄設置我的路徑(和其他一些環境變數),所以我的主目錄中有以下文件

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.shetc/zsh/zprofile. 我也嘗試使用.而不是源,但即使進行了這些更改,我仍然%F{51}~%f在我的路徑變數中看到相同的內容。實際上,我注意到我在 PATH 變數中看到了我目前目錄的任何內容,例如,如果我導航到/etc/zsh/and echo $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 不會將其與 混淆,但PATHzsh 會。感謝大家的幫助。

我的問題實際上不在我試圖設置路徑的程式碼中"$MY_DIR/bin:$PATH",而是在我在我的.zshrc. 我正在使用自定義腳本來設置我的 shell 提示符,其中我使用了聲明為的變數path,認為這不會與環境變數衝突,但​​是,正如@AdaephonPATH在評論中指出的那樣,zsh將關鍵字與.path``PATH

因此,對我來說,解決方案是將我的提示函式中的變數重命名為cur_path(或類似的)。嘗試將變數定義為local path 將導致 segfault

引用自:https://unix.stackexchange.com/questions/449692