zsh PATH 变量未从另一个环境变量正确设置

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都使用过,没有任何问题。但是,我尝试将文件移动到并从中获取它。我还尝试使用而不是源,但即使进行了这些更改,我仍然在路径变量中看到相同的内容。实际上,我注意到我在 PATH 变量中看到了当前目录的所有内容,因此,例如,如果我导航到和,我会看到.~zshrc/etc/zsh/my_file.shetc/zsh/zprofile.%F{51}~%f/etc/zsh/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 不会将其与 混淆PATH,但 zsh 却会。感谢大家的帮助。

答案1

我的问题实际上不在我尝试设置路径的代码中"$MY_DIR/bin:$PATH",而是在我在.zshrc.我正在使用自定义脚本来设置 shell 提示符,其中我使用了声明为 的变量path,认为这不会与环境变量冲突PATH,但是,正如 @Adaephon 在评论中指出的那样, zsh双向同步关键字pathPATH.

因此,对我来说,解决方案是将提示函数中的变量重命名为cur_path(或类似)。尝试将变量定义为local path 会导致段错误

相关内容