qqx*_*qqx 22
这是因为您的.zshrc是针对每个新的zsh进程进行评估的.因此,当你启动iTerm2时,会对你的$ PATH进行评估,然后当你启动获取修改后的$ PATH的tmux并将其传递给那里的zsh的新实例时,新的zsh进程再次评估.zshrc制作再次改变.
有几种方法可以防止这种情况发生.
首先,要专门防止tmux内部的shell发生,如果设置了$ TMUX,你可以跳过进行这些更改:
if [[ -z $TMUX ]]; then
PATH="$PATH:/foo"
fi
Run Code Online (Sandbox Code Playgroud)
另一种选择是将.zshrc的该部分移动到.zprofile文件中.此文件仅由登录shell评估.但是,默认情况下,tmux会将新shell作为登录shell启动,因此您还需要通过在tmux配置中添加以下内容来阻止tmux执行此操作:
set -g default-command /bin/zsh
Run Code Online (Sandbox Code Playgroud)
您可能需要调整zsh的路径.这会阻止tmux将zsh进程作为登录shell启动,因此tmux中的zsh不会查看.zprofile.
为了防止重复添加,您链接到的代码片段的另一个选项是将路径修改更改为:
typeset -aU path
path=( $path /foo )
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为zsh会自动将$ path变量设置为一个镜像$ PATH内容的数组.排版的-U选项修改该变量,以使条目唯一.