我应该如何在 Mac 上设置 PATH 变量以便找到 Hombrew 安装的工具?

Mel*_*emi 96 git homebrew macos

尝试在新 Mac 上设置Homebrew(在以前的 Mac 上,我会从源代码安装软件包)。

我尝试安装的第一个软件包是 Git:

$ brew install git
Run Code Online (Sandbox Code Playgroud)

安装顺利,但which git仍然显示/usr/bin/gitLion一起出现的那个(我认为?)。而不是/usr/local/bin/git刚刚安装的那个。

$ echo $PATH
/Users/meltemi/.rvm/gems/ruby-1.9.2-p290@rails31/bin:/Users/meltemi/.rvm/gems/ruby-1.9.2-p290@global/bin:/Users/meltemi/.rvm/rubies/ruby-1.9.2-p290/bin:/Users/michael/.rvm/bin:/usr/local/mysql/bin:/opt/subversion/bin:/Developer/Additions/checker/:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin
Run Code Online (Sandbox Code Playgroud)

正如你可以看到/usr/bin默认为之前/usr/local/bin$PATH

所以,我很困惑!我认为HomeBrew 的重点(以及创作者似乎吹嘘的东西)是您不必弄乱$PATH变量!?!

那么,我做错了什么?

小智 87

我发现这个相关的帖子非常有帮助。$PATH它只是让您简单地编辑/etc/paths文件,而不是更改变量。

Homebrew 想让我修改我的 PATH;不知道如何

一旦我按照/usr/local/bin上面的说明进行操作/usr/bin,我的问题就解决了。

  1. 在 OS X 上,打开终端
  2. 输入命令: sudo vi /etc/paths
  3. 如果系统要求您输入密码
  4. 您将看到路径列表。编辑它们,以便在/usr/local/bin路径上方输入/usr/bin路径
  5. *保存并退出
  6. 重启终端

这是我这样做后的样子:

/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin
Run Code Online (Sandbox Code Playgroud)

*要保存并退出,请键入冒号 ( :),然后键入wq(同时写入和退出),然后键入Enter.

您还可以/etc/paths在图形文本编辑器中打开文件并以这种方式进行编辑。

感谢fengd 在堆栈溢出了他的回答那边。

  • 我会谨慎使用 - 更好的答案是修改 .profile / .bash_profile 中的路径并将其导出到那里。通过更改 /etc/paths,您(可能)会影响所有系统进程;更改 .profile / .bash_profile 中的 PATH 会将偏好本地化到您的帐户和通过命令外壳调用的那些命令(在我的开发案例中,这就是我想要的)。如果你真的很谨慎,你可以按照@Aristotle Pagaltzis 在下面的答案中提出的建议去做。 (14认同)

Ari*_*zis 32

这个答案已经过时了。首选的 HomebrewPATH订购方式曾经如解释的那样,但现在不再如此。但是,该方法更普遍适用,因此为了利益起见,我将其搁置。


你不应该。

自制故意保存/usr/local/bin /usr/bin在最大兼容性的路径。PATH通过编辑颠倒这些目录的顺序/etc/paths意味着系统上任何地方的所有程序,无论它们如何启动,都将获得命令的 Homebrew 版本。但有些人可能特别期待 Apple 的版本,或者只是无法使用更新的版本等。

如何保留此原则并仍然获得 Homebrew 安装的版本git?俗话说,所有问题都可以用一层间接解决(除非间接层太多)。— 或者在这种情况下,事实证明是两层。

具体来说,将~/bin目录放在PATH. 这是我的第一个位.bashrc

[[ :$PATH: == *:$HOME/bin:* ]] || PATH=$HOME/bin:$PATH
Run Code Online (Sandbox Code Playgroud)

这将检查是否PATH包含~/bin,如果没有,则在前面添加它。有了这个,然后有选择地使 Homebrew 管理的git优先于系统版本(而不是每个Homebrew 管理的二进制文件),并且仅用于您的 shell 会话(而不是从任何地方启动的所有程序,包括 GUI 程序),是就像符号链接一样简单:

ln -s /usr/local/bin/git ~/bin/git
Run Code Online (Sandbox Code Playgroud)

可以/usr/local/Cellar/git/1.8.2.1/bin/git直接进行符号链接,但是每次执行brew upgrade git(直接或间接)操作时都必须修复符号链接。通过符号链接到 Homebrew 的固定位置符号链接,您不必担心。

因此,您将目录添加到您的目录中,$HOME以便您可以将其添加到您的目录中,PATH以便您可以符号链接到符号链接,这解决了您的问题并使苏斯博士微笑。哟,天啊,我喜欢符号链接,所以我们在你的路径中放了一条路径,PATH这样你就可以在符号链接的同时进行符号链接。

  • 确实,在 el cap 上,我失败了过时的答案,并成功地(我使用 ZSH)编辑 .zshrc `export PATH="/usr/local/bin:/usr/bin:/bin:/usr 中的路径顺序/sbin:/sbin"` (2认同)

Nic*_*uer 18

你没有做错任何事,但很明显,如果你/usr/local/bin/usr/bin这个特定问题消失之前阻止了你的道路。最简单的解决方法就是这样做并放置类似的东西

export PATH=/usr/local/bin:$PATH
Run Code Online (Sandbox Code Playgroud)

在您中~/.bash_profile,首先找到 Homebrew 安装的所有内容。这就是我在我的 Mac 上设置它的方式,它已经为我工作了这么长时间,但是,YMMV。

看起来他们确实相信它会/usr/local/binafter 中 起作用/usr/bin,所以虽然我可能已经搞砸了我自己的$PATH,但我可以看到他们的文档缺乏的地方:

请注意,您应该紧随/usr/local/bin其后,/usr/bin 因为某些程序会期望获得系统版本,例如 ruby​​,如果获得较新的 Homebrew 版本,则会中断。

来自wiki 和 brew doctor #10738 之间的差异。请注意,该文档接着说,“FAQ(上面的引用)是指 GUI 应用程序的 PATH 设置;医生( 在 PATH 中/usr/local/bin提前的建议/usr/bin)是指 CLI 应用程序的 PATH 设置。”


Nat*_*han 6

我不同意 jthomas 的回答。编辑 /etc/paths 文件将更改所有程序的加载路径。如果系统应用程序希望找到二进制文件的特定版本,但由于您编辑了路径文件而找到了不同的版本,这可能很危险。相反,在 ~/.bashrc (或 ~/.bash_profile)中更改路径变量。那么你的加载路径只会在终端内改变:

# 添加 homebrew 应用到 PATH
export PATH=/path/to/homebrew/app/bin:$PATH

然后重新加载 bash 或source ~/.bashrc,你就可以开始了。由于 homebrew 路径在其他任何东西之前,bash 将加载您使用 homebrew 下载的版本。