据我了解,brew
没有任何东西/usr/local/bin
可以与Apple分布式可执行文件相撞(具有相同的名称)。因此,具有/usr/local/bin
在路径之前/bin
和/usr/bin
不应该是一个问题,因为应该没有名称冲突。*但是,看问题有ls
和tar
,和使用其它包装聚合像fink
和port
(使用MacPorts),远低于。
Brew
我知道有助于管理名称冲突的两件事之一:
Brew
将未链接的小桶留在地窖中。 要安装东西,brew将工具留在原处,并在中创建指向这些工具的符号链接/usr/local/bin
。对于brew
不希望与名称冲突的工具,它不会创建符号链接。
- 对于许多(如果不是全部)同样位于
/bin
和中的标准工具/usr/bin
,请brew
在链接中/usr/local/bin
添加前缀“ g”,例如,要ls
使用brew版本执行,请使用gls
。 只需做一个ls -l
in /usr/local/bin
并查找链接的文件-这些就是brew
放在那里的文件。注意:brew
必须以真实名称访问的已安装工具位于中/usr/local/Cellar/coreutils/8.21/libexec/gnubin
。
我/usr/local/bin
之所以没有走这条路,有两个原因-这些原因是我回答的最底层。
要评估系统中的名称冲突,请使用brew doctor
并查找此部分-这brew doctor
是您感兴趣的输出:
Warning: /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:
ctags
emacs
emacsclient
etags
ex
git
git-cvsserver
git-receive-pack
git-shell
git-upload-archive
git-upload-pack
rview
rvim
view
vim
vimdiff
vimtutor
xxd
Consider setting your PATH so that /usr/local/bin
occurs before /usr/bin. Here is a one-liner:
echo export PATH='/usr/local/bin:$PATH' >> ~/.bash_profile
我之所以没有将其brew
工具放在首位,实际上根本就不是,这是因为brew
安装ls
和tar
命令无法正确处理文件系统ACL,实际上是我上次检查(即上周)时没有,根本没有处理。这是一个很大的问题,为了完全避免它,以及与man
标签相关的页面配置问题以及设置$PATH
正确的权限,我确保将OSX
相关工具(尤其是在/bin
和中找到的工具)/usr/bin
放在首位。
我什至不愿意走的另一个原因/usr/local/bin
是因为brew
与他人的配合不佳,并且fink
and port
(MacPorts)目前拥有更多需要我现在支持的软件包。例如,我可以gnome-terminal
使用fink
,但是构建一个公式并使用进行相同的工作会很费力brew
。因此,在搜索时,我会保留/sw
和/opt
搜索$PATH
(分别为fink
和port
),并从中引用所需的内容/usr/local/bin
,包括gnat
,或者是拼写出来的,或者是使用bash
alias
的,或者setup
是在编写Ada
代码时为完全不同的环境提供文件。
问题是,它实际上取决于当时的需求。
这是我上面提到的ACL问题的示例。
使用标准OSX
工具:
$ /bin/ls -le /var/root | head -7
total 24
drwx------+ 3 root wheel 102 May 28 2013 Desktop
0: group:everyone deny delete
1: user:_spotlight inherited allow list,search,readattr,readextattr,readsecurity,file_inherit,directory_inherit
drwx------+ 6 root wheel 204 Sep 19 14:22 Documents
0: group:everyone deny delete
1: user:_spotlight inherited allow list,search,readattr,readextattr,readsecurity,file_inherit,directory_inherit
并使用已brew
安装的工具:
$ /usr/local/bin/gls -le /var/root
/usr/local/bin/gls: invalid option -- 'e'
Try '/usr/local/bin/gls --help' for more information.
和
$ /usr/local/bin/gls --help | grep -i acl
您将获得类似的结果,tar
而我不知道其他许多brew
工具,但是谁又有能力因为ACL
问题而在6个月内中断某些工作!