brew doctor 说“错误:/usr/bin 发生在 /usr/local/bin 之前”如何解决?

Posted

技术标签:

【中文标题】brew doctor 说“错误:/usr/bin 发生在 /usr/local/bin 之前”如何解决?【英文标题】:brew doctor says "Error: /usr/bin occurs before /usr/local/bin" how to fix? 【发布时间】:2012-07-05 08:38:59 【问题描述】:
Adams-MacBook-Pro% brew doctor                                 

Error: /usr/bin occurs before /usr/local/bin
This means that system-provided programs will be used instead of those
provided by Homebrew. The following tools exist at both paths:

    clusterdb
    createdb
    createlang
    createuser
    dropdb
    droplang
    dropuser
    ecpg
    git
    git-cvsserver
    git-receive-pack
    git-shell
    git-upload-archive
    git-upload-pack
    gitk
    pg_config
    pg_dump
    pg_dumpall
    pg_restore
    pg_upgrade
    psql
    reindexdb
    vacuumdb

Consider amending your PATH so that /usr/local/bin
is ahead of /usr/bin in your PATH.

这是我的路径:

Adams-MacBook-Pro% echo $PATH                                  
/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin

我认为将东西移到前面很危险?我该如何解决这个问题?另外,我什至不确定在哪里可以找到 /user/bin 在路径中声明的位置。

谢谢

【问题讨论】:

每个有这个问题的人,请按照 Homebrew 的说法运行 echo export PATH='/usr/local/bin:$PATH' >> ~/.bash_profile 并且不要忘记重新启动终端(或您正在使用的任何命令行工具)并尝试再次运行 brew doctor 对于那些在 PATH 中已经有 /usr/local/bin 但不在 /usr/bin 之前的人,请参阅 Lelouchcr's answer 关于编辑 /etc/paths (通过没有重复条目来保持 PATH 更整洁)。 【参考方案1】:

$PATH 只是一个包含字符串的变量。把东西放在前面:

% PATH=/usr/local/bin:$PATH
% echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin

这并不危险,因为它只适用于您打开的当前 shell(它不会影响您的系统或其他 shell 的路径)。

要自动更改您打开的所有 shell 的路径,请将其放入 ~/.profile。如果此文件不存在,您可以创建它。

~/.profile:

homebrew=/usr/local/bin:/usr/local/sbin
export PATH=$homebrew:$PATH

export 使该变量可用于 shell 的任何子进程。

【讨论】:

我这样做了,创建了 ~/.profile 然后 echo $PATH 但路径没有改变。我关闭了终端并重新打开,但它仍然是相同的路径。 brew医生还在抱怨。 要使对 ~/.profile 的任何更改生效,您要么必须重新打开终端,要么输入 % source ~/.profile。至于为什么它不工作,首先确保文件按预期运行。在~/.profileecho 'profile works!' 中添加另一行,然后运行% source ~/.profile。如果您看到打印到屏幕上,请告诉我。 我还应该注意空格在这里很重要。等号两边不能有空格。 是的,打印到屏幕上“配置文件有效!”。此外,user/local/bin 现在位于前面。 brew doctor 说:“你的系统正在酝酿中。”但是,我删除了“echo 'profile works!'现在这条路又断了。 当你打开一个新的终端时会发生同样的事情吗(消息和你的路径都被改变了)?【参考方案2】:

我找到了解决这个问题的另一种方法。

sudo vim /etc/paths

并像这样添加 /usr/local/bin 和 /usr/local/sbin

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

打开一个新的终端标签,然后你会看到

~ $ env|grep PATH
PATH=/usr/local/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin

【讨论】:

IMO 这是最干净的解决方法。它实际上解决了根本问题,并且不会两次将条目放入 PATH 中。 这对我有用。我尝试了 brew 的建议,创建了 .profile,甚至手动修改了 .bash。当然,我确实重新启动了计算机以确保它不是问题所在。除了这个答案之外,没有任何效果。谢谢! 这正是我想要找到的,我正在寻找这些条目在 PATH 变量中的位置,以便像你一样添加。 同意,这应该是公认的答案,因为这对我来说非常有效。【参考方案3】:

只需在您喜欢的终端应用程序中运行以下行:

echo export PATH="/usr/local/bin:$PATH" >> ~/.bash_profile

重启终端并运行

brew doctor

问题应该解决

【讨论】:

【参考方案4】:

我刚刚创建了一个 .bashrc 文件并添加了

自制=/usr/local/bin:/usr/local/sbin 导出 PATH=$homebrew:$PATH

这似乎成功了!

【讨论】:

应该是 /usr/local/bin(不是 sbin)? 这为我解决了这个问题 - 我使用的是 zsh,所以只编辑 .profile 或 .bash_profile 是行不通的,但是将这些行添加到 .zshrc 就可以了。【参考方案5】:

也许 OP 正在使用 zsh。 解决方法是编辑 ~/.zshrc 每次打开 iterm 都会加载这个文件。 更改关于 PATH 的字眼。

【讨论】:

【参考方案6】:

如果您真的想将其永久化和默认设置,请编辑文件 /etc/paths(使用 sudo)并将 /usr/local/bin 移至列表顶部。

在我自己的 .bash_profile 中,我使用了一个名为“pathadd”的脚本,它可以防止我的 PATH 在 shell 被分叉时变得笨拙和充满重复。所以我专门采取了 /etc/paths 操作,通过一次又一次地将 /usr/local/bin 添加到前面来避免在 PATH 中出现重复的目录。

【讨论】:

【参考方案7】:

使用 $PATH 进行任何更改后,您需要重新启动终端。

【讨论】:

【参考方案8】:

在需要编辑的 OS X Mountain Lion 上是 ~/.bash_profile

【讨论】:

以上是关于brew doctor 说“错误:/usr/bin 发生在 /usr/local/bin 之前”如何解决?的主要内容,如果未能解决你的问题,请参考以下文章

运行 Brew Doctor 时的主要警告

Homebrew brew doctor 关于 /Library/Frameworks/Python.framework 的警告,即使安装了 brew 的 Python

如何修复 brew doctor 警告

appium---MacAppium-Doctor提示WARN:“ ios_webkit_debug_proxy cannot be found”解决方案

gcc 错误“/usr/bin/ld: 找不到 -lstdc++”

出现错误 /usr/bin/env: node : Permission Denied