5

我在 Mac OS X 10.8.3 上使用 Homebrew。Homebrew 希望/usr/local/binPATH 中的目录早于/usr/bin,否则将使用系统提供的程序而不是 Homebrew 管理的替换。

我正在使用 zsh,并在我.zshenv的重置 PATH 中,然后使用 path_helper 对其进行初始化,如下所示:

if [ -x /usr/libexec/path_helper ]; then
  PATH=''
  eval `/usr/libexec/path_helper -s`
fi

紧接着.zshenv,我也在/usr/local/binPATH 中添加了前缀。

export PATH="/usr/local/bin:$PATH"

$PATH 还有其他各种附加功能。RVM/usr/local/sbin和我的个人bin目录:

export PATH=$HOME/.rvm/bin :$PATH
...
export PATH=$PATH:/usr/local/sbin:$HOME/bin

最后,我使用typeset -u从 PATH 中删除任何重复项(尽管它们来自哪里对我来说是个谜)。

typeset -U PATH 

毕竟这就是我的 PATH 的样子:

/Users/mark/.rvm/gems/ruby-1.9.3-p374/bin
/Users/mark/.rvm/gems/ruby-1.9.3-p374@global/bin
/Users/mark/.rvm/rubies/ruby-1.9.3-p374/bin
/Users/mark/.rvm/bin
/usr/bin
/bin
/usr/sbin
/sbin
/usr/local/bin
/usr/local/sbin
/Users/mark/bin

我知道/etc/paths设置这些路径:

/usr/bin
/bin
/usr/sbin
/sbin
/usr/local/bin

所以我编辑了那个文件并删除了/usr/local/bin' option so that the only place it is being set is in.zshenv`。

所有这些都包含在我在 GitHub ( https://github.com/zan5hin/dotfiles )上的 dotfile 存储库中,并且正在两台笔记本电脑上使用。在第一台笔记本电脑上,路径是正确的,/usr/local/bin紧跟在 RVM 条目之后。正如我在上面详述的那样,在第二台笔记本电脑上它出现了。

当 zsh 配置是相同的副本时,我无法解释为什么第二台机器上的路径不正确。

任何人都可以建议为什么路径会乱序吗?

谢谢。

4

2 回答 2

4

zsh 按以下顺序读取文件(从man 1 zsh

  1. $ZDOTDIR/.zshenv
  2. /etc/zprofile(如果登录)
  3. $ZDOTDIR/.zprofile(如果登录)
  4. /etc/zshrc(如果是交互式的)
  5. $ZDOTDIR/.zshrc(如果是交互式的)
  6. /etc/zlogin(如果登录)
  7. $ZDOTDIR/.zlogin(如果登录)

如果 ZDOTDIR 未设置,则使用 HOME。上面列出的 /etc 中的文件可能位于另一个目录中,具体取决于安装。

您对 (2) 之前的 (1) 进行了更改;(2) 的 macOS 默认值为:

% cat /etc/zprofile
# System-wide profile for interactive zsh(1) login shells.

# Setup user specific overrides for this in ~/.zprofile. See zshbuiltins(1)
# and zshoptions(1) for more details.

if [ -x /usr/libexec/path_helper ]; then
    eval `/usr/libexec/path_helper -s`
fi

因此,您的更改将被 macOS 默认值覆盖。您需要稍后在管道中进行 PATH 更改以保持顺序。

于 2020-08-10T16:44:32.057 回答
0

这一行是错误的:

export PATH=$HOME/.rvm/bin :$PATH

它应该是:

export PATH=$HOME/.rvm/bin:$PATH

之前的空格:$PATH导致您丢失$PATH.

于 2013-03-31T05:26:34.133 回答