添加家庭酿造到PATH

art*_*n66 2 variables environment homebrew path

我刚刚安装了Home-brew,现在我试图通过在终端内输入两个命令,将home-brew目录插入到我的路径环境变量的顶部.我的问题是这些:

什么是路径环境变量?

这两个代码是否正确?

echo "export Path=/usr/local/bin:$PATH" >> ~/.bash_profile && source  ~/.bash_profile
Run Code Online (Sandbox Code Playgroud)

在此之后我将输入酿造医生.就我所见,没有任何事情发生.有人能给我一些建议或指导吗?

Luc*_*nti 39

我在我的新 Mac M1 中安装了 brew 并要求我/opt/homebrew/bin输入路径,因此对于这种情况,正确的命令是:

echo "export PATH=/opt/homebrew/bin:$PATH" >> ~/.bash_profile && source ~/.bash_profile
Run Code Online (Sandbox Code Playgroud)

  • 这只是添加到当前的终端会话。我们能以某种方式让它始终保持在路径中吗? (9认同)
  • 如果您使用 zsh,请使用 .zprofile 而不是 .bash_profile。 (4认同)

kau*_*nav 12

其他答案对我不起作用。以下命令显示在brew 安装结束时。

- Add Homebrew to your PATH in ~/.zprofile:
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofile
eval "$(/opt/homebrew/bin/brew shellenv)"
Run Code Online (Sandbox Code Playgroud)

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


小智 10

根据最新文档,您需要执行以下操作:

echo 'eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"' >> $HOME/.bashrc
eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"
Run Code Online (Sandbox Code Playgroud)

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


小智 6

TL; DR

echo "export PATH=/usr/local/bin:$PATH" >> ~/.bash_profile && source ~/.bash_profile
Run Code Online (Sandbox Code Playgroud)

是你想要的.

回答你的第一个问题; 为了运行(执行)程序(可执行程序),shell必须确切地知道它在文件系统中的位置才能运行它.在PATH环境变量是一个目录列表,该外壳使用搜索可执行文件.当您使用未构建到shell中的命令时,您正在使用shell将按顺序搜索这些目录,并将执行它找到的第一个匹配的可执行文件.

例如,当您键入:mv foo barshell几乎肯定使用位于/ bin目录中的可执行文件.因此完全是命令

/bin/mv foo bar
Run Code Online (Sandbox Code Playgroud)

因此,PATH环境变量可以为您节省一些额外的输入.您可以通过输入以下内容来查看PATH中的内容(与所有环境变量一样):

echo $<NAME OF VARIABLE>
Run Code Online (Sandbox Code Playgroud)

所以在这个例子中:

echo $PATH
Run Code Online (Sandbox Code Playgroud)

正如我之前提到的,订购很重要.将/ usr/local/bin添加到PATH的开头意味着shell将首先在那里搜索,因此如果您在该文件夹中有可执行文件foo,它将优先于您在文件夹中的文件夹中使用的任何其他foo可执行文件.路径.这意味着您使用brew安装的任何可执行文件都将优先于系统默认值使用.

关于你的第二个问题.你所提供的命令试图做的是添加一行到你的.bash_profile,然后采购它..bash_profile是一个存储在您的主目录中的文本文件,每次bash(您的shell)启动时都会获取(读取).您提供的行中的错误是只有PATH的第一个字母大写.对你的shell路径和路径是非常不同的东西.

要修复它你想要:

echo "export PATH=/usr/local/bin:$PATH" >> ~/.bash_profile && source ~/.bash_profile
Run Code Online (Sandbox Code Playgroud)

解释

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

简单地打印或回显stdout后面的内容,在上面的例子中是stdout.(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
Run Code Online (Sandbox Code Playgroud)

在我的系统上因为在双引号内使用$ PATH意味着bash会用它的值替换它.>>然后用于将stdout重定向到〜/ .bash_profile文件的末尾.是您的主目录的简写.(请注意,因为>将重定向到文件并覆盖它而不是附加.) &&表示运行下一个命令是前一个成功并且

source ~/.bash_profile
Run Code Online (Sandbox Code Playgroud)

只需执行该文件中包含的操作即可.


mus*_*sic 5

当您在某处输入程序并单击 Enter 时,它会检查某些位置以查看该程序是否存在。Linux brew 使用的位置与普通 Linux 程序不同,因此我们将这些位置添加到设置路径的 ~/.profile 文件中。

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

echo "eval \$($(brew --prefix)/bin/brew shellenv)" >>~/.profile
Run Code Online (Sandbox Code Playgroud)

不要使用 .bash_profile,因为当您使用与 bash 不同的东西(例如 zsh)时,它可能不起作用。.profile 是正确的位置。