根据文档
.zshenv
除非设置了 -f 选项,否则在 shell 的所有调用中都会获取该信息。它应该包含设置命令搜索路径的命令,以及其他重要的环境变量。.zshenv
不应包含产生输出的命令或假设 shell 连接到 tty。
好吧,很酷,所以我假设通过 ssh 登录被视为调用 zsh...但也许不是?
wayne@arglefraster ~
⚘ echo $PATH 10:01:17
/usr/local/heroku/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/lib/jvm/default/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl
wayne@arglefraster ~
⚘ zsh 10:01:20
e%
wayne@arglefraster ~
⚘ echo $PATH 10:01:24
/usr/local/heroku/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/lib/jvm/default/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl:/home/wayne/.rvm/bin:/home/wayne/.bin:/home/wayne/.local/bin
这些额外的路径位被添加到我的.zshenv
文件中。
这是正常现象,还是我有什么奇怪的事情发生?我应该将 PATH 修改移到其他地方吗?
答案1
zshenv
确实被 shell 的每个实例读取,但它被读取第一的,首先。您$PATH
可能会在zprofile
(~/.zprofile
或/etc/zprofile
, ...) 中重置。
zshenv
不是设置$PATH
.它属于zprofile
,它的作用是在登录时设置环境。设置环境变量zshenv
意味着在一个会话中运行简单的zsh
子 shell 或zsh
脚本时它们会被破坏。
答案2
确认您处于 Z shell,这是您的登录 shell
.zshenv
应该在您 ssh 进入计算机时运行。如果不运行的话
- 当您使用以下命令 ssh 进入计算机时,检查您是否处于 Z shell 中
echo $SHELL
- 如果您不在 Z shell 中,请运行
zsh
它将显式启动 Z shell 并确认您的.zshenv
工作。如果是,请运行exit
以退出 Z shell。 - 如果该文件有效,请更改您的登录 shell,
- 通过 ssh 登录时
- 运行
command -v zsh
一下你就知道 Z shell 在哪里了,如果没有返回任何内容,你需要安装 Z shell - 然后运行
chsh
并为其提供 Z shell 的路径 - 注销并使用 ssh 重新登录。