54

今天我curl通过安装公式homebrew,但在安装它(并重新采购外壳)后,我注意到:

% which curl 
/usr/bin/curl

事实上, 的输出brew install curl表明它是一个仅限小桶的公式,并且由于curl已经存在于 OS X 中,它没有将其链接到 Homebrew 前缀,因为这可能会导致未指定的问题。

然后它继续说明

一般来说,这对您没有任何后果

我想知道:

  • 具体有哪些问题?
  • 通过 Homebrew 安装仅桶装配方的目的是什么?如果新安装的工具不在PATH.
4

2 回答 2

57
  • 问题:如果将自制应用程序放在相同的默认 OS X 版本前面的路径中,那么任何事情都可能发生。最常见的问题是由两个版本中可用的命令行选项集之间的差异或选项含义的差异引起的。对于 curl 来说,后果可能并没有那么糟糕,但对于其他应用程序来说,最坏的情况可能会破坏操作系统。
  • Keg-only:现在你有两个版本的 curl!默认的 OS X 和自制软件。如果您想使用不在默认值但在自制软件中的功能,您可以通过显式调用自制软件 curl 来实现。确切的路径取决于您如何设置自制软件。因为新安装的版本不在路径中,所以除非显式调用,否则不太可能导致问题。
于 2011-01-14T13:24:16.613 回答
1

我想对@asymmetric 提出的第二个问题(与仅桶的机制有关)添加一些补充。

HomeBrew 的前缀是/usr/local,并且 HomeBrew 将所有已安装的小桶保存在默认目录中,例如/usr/local/Cellar. 一般来说,HomeBrew 可以为已安装的公式(非仅桶公式)创建符号链接,并且相应的符号链接保存在/usr/local/bin. 当 HomeBrew 安装公式时,此符号链接创建过程是自动的。这里的路径/usr/local/bin将被称为默认(符号链接)前缀。

另一方面,根据 HomeBrew 的常见问题解答,我们有以下指导:

``仅桶式配方仅安装到酒窖中,并且未链接到默认前缀中。这意味着大多数工具都找不到它。''

但同时 HomeBrew 会在目录/usr/local/opt中为所有已安装的公式创建符号链接,无论它们是否仅是小桶。

我们应该注意两个关键点:

  1. 默认情况下,默认(符号链接)前缀/usr/local/bin是 in PATH,但非前缀/usr/local/opt不是 in PATH
  2. 默认情况下,默认(符号链接)前缀/usr/local/bin 通常指向最新版本的公式。因此,如果您想使用某些公式的特定版本(通常是仅桶格式),您可以临时在您PATH的前面加上仅桶公式的bin目录,例如,export PATH="$(brew --prefix)/opt/FormulaName/bin:${PATH}".

上述设置/usr/local/opt可以解决可执行文件冲突。一般来说,你的系统中可能有一个公式或程序有很多不同的版本,比如最新版本和过时版本,苹果原生版本和本地安装版本等等。当您执行或编译一些与当前使用的公式或程序有些相关的其他程序时,这些情况可能会导致冲突。

于 2021-10-26T14:43:10.697 回答