将Homebrew添加到PATH

38

我刚刚安装了Homebrew,并且现在正在尝试通过在终端中键入两个命令将homebrew目录插入到我的path环境变量的顶部。我的问题是:

什么是path环境变量?

这两个给出的代码是否正确?

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

接下来我需要输入brew doctor,但据我所见没有任何反应。 有人能给我提供一些建议或指导吗?


1
只是提醒一下,它是一个单词:Homebrew。 - bfontaine
如果你是第一次安装brew,按照以下步骤进行操作:https://stackoverflow.com/a/76720643/4010017 - undefined
5个回答

102

我在我的新Mac M1上安装了brew并且它要求我将/opt/homebrew/bin加入路径中,因此正确的命令是:

echo "export PATH=/opt/homebrew/bin:$PATH" >> ~/.bash_profile && source ~/.bash_profile

8
这仅仅是在当前终端会话中添加路径。我们是否有办法让它一直保持在路径中? - Shekhar Reddy
2
如果您正在使用zsh,请使用.zprofile而不是.bash_profile。 - pascalre
我不得不添加/opt/homebrew/sbin,因为一些工具会将它放在那里(例如mtr)。 - undefined
如果你是第一次安装brew,按照以下步骤进行操作:https://stackoverflow.com/a/76720643/4010017 - undefined
1
@ShekharReddy 嗯...这个命令是写在bash配置文件中的,所以当你打开终端时,导出就会被调用,这样你就没问题了。源命令是另一个命令,用来加载bash配置文件,这样导出就能立即生效。 - undefined

36

简而言之

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

这就是你想要的。

回答你的第一个问题:为了运行(执行)一个程序(可执行文件),shell 必须确切知道它在你的文件系统中的位置。 PATH 环境变量是一组目录,shell 使用它来搜索可执行文件。当你使用不在 shell 中内置的命令时,shell 会按顺序搜索这些目录,并执行它找到的第一个匹配的可执行文件。

例如,当你输入:mv foo bar 时,shell 几乎肯定实际上使用的是位于 /bin 目录中的可执行文件。因此,完整的命令是

/bin/mv foo bar

PATH环境变量可以帮助你节省一些额外输入。你可以像查看其他环境变量一样,通过输入以下内容来查看当前PATH中的内容:

The PATH environment variable therefore saves you some extra typing. You can see what is in your PATH currently (as you can with all environment variables) by entering:

echo $<NAME OF VARIABLE>

所以在这种情况下:

echo $PATH

如我之前所提到的,顺序很重要。在PATH的开头添加/usr/local/bin意味着Shell首先会在那里搜索,因此如果你在该文件夹中有一个可执行文件foo,它将优先于您路径中其他文件夹中可能有的任何其他foo可执行文件。这意味着您使用brew安装的任何可执行文件都将优先使用系统默认设置。

接下来是你的第二个问题。你提供的命令尝试做的是向你的.bash_profile添加一行,然后source它。.bash_profile是存储在你的主目录中的文本文件,每次Bash(你的Shell)启动时都会被(读取)。你提供的这行代码中的错误是只把PATH的第一个字母大写了。对于你的Shell而言,Path和PATH是非常不同的东西。

要修复它,你需要:

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

解释一下

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

简单地打印或回显后面的内容到 标准输出,在上面的示例中是终端。(stdout、stderr和stdin是UNIX系统中非常重要的概念,但与本主题不太相关) 执行该命令会产生以下结果:

export PATH=/usr/local/bin:/opt/local/sbin:/opt/local/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin

在我的系统上,因为在双引号中使用$PATH会导致bash将其替换为其值。接下来使用>>stdout重定向到~/.bash_profile文件的末尾。是您的主目录的简写。(NB一定要非常小心,因为>将重定向到文件并覆盖它而不是追加。&&表示如果前一个命令成功,则运行下一个命令。

source ~/.bash_profile

仅仅执行包含在该文件中的操作。


10
根据最新文档,你需要这样做:
echo 'eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"' >> $HOME/.bashrc
eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"

现在你应该可以在任何地方运行brew。

一旦在Mac上安装了brew,就会显示相同的内容,这是正确的。说明中有两个命令需要使用用户名在路径中执行。我使用的是M1 Macbook Pro和Monterey系统。 - sud007
需要指出的是,对于初学者用户(可能是这个问题的目标受众),你的代码片段指向了一个在你用户名(dhruv)下的文件,而这个文件在其他人的计算机上不存在。或许你应该考虑将其替换为一个通用字符串,并在回答的说明中进行说明。 - Luca Bezerra

5
其他答案对我没用。以下命令显示在brew安装的最后。
- Add Homebrew to your PATH in ~/.zprofile:
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofile
eval "$(/opt/homebrew/bin/brew shellenv)"

执行这两个命令,将brew添加到PATH,并在终端会话中持久存在。

太棒了!对我来说,它是~.zshrc - undefined

4

当你在某个地方输入程序并点击回车时,它会检查某些位置以查看该程序是否存在。

Linux brew使用与普通Linux程序不同的位置,因此我们将这些位置添加到~/.profile文件中,该文件设置了路径。

在终端中运行此命令,它将自动将正确的代码放入.profile文件中。

echo "eval \$($(brew --prefix)/bin/brew shellenv)" >>~/.profile

不要使用.bash_profile,因为当你使用与bash不同的东西,比如zsh时,它可能无法正常工作。正确的位置是.profile。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接