为什么或如何通过我的道路不被尊重MacOSX?

时间:2011-10-18 22:05:14

标签: macos osx-leopard which

二进制文件如何“默认”执行 - 即。在which命令返回的路径中找到的第一个实际上并不是默认情况下实际执行的二进制文件? (我在2008 MacBook Pro上运行Mac OS X 10.5。)

我刚刚通过运行brew install git

安装了最新版本的git

它将新版本安装在路径中更高或更早的位置,而不是旧版本的二进制文件。但是,默认情况下不会执行新版本。就像shell在安装新的二进制文件之前缓存了二进制文件的位置一样 - 但是which命令在每次运行时都会解析路径。

我想了解这里发生了什么,并了解如何刷新'缓存'而无需注销或重启机器。这就是我所看到的:

which git

返回

/usr/local/bin/git

,而

git --version

返回

git version 1.6.5

/usr/local/bin/git --version

返回

git version 1.7.7

进一步检查,

which -a git

返回

/usr/local/bin/git
/usr/local/git/bin/git
/usr/local/bin/git
/usr/local/git/bin/git
/usr/local/bin/git
/usr/local/git/bin/git

(是的 - 我的路径设置有一些冗余。)

/usr/local/git/bin/git --version

返回

git version 1.6.5

更新 - 这是答案bash哈希。 ( from: In bash, "which" gives an incorrect path - Python versions

type git

git is hashed (/usr/local/git/bin/git)

$ hash -d git

$ type git
git is /usr/local/bin/git

$ which git
/usr/local/bin/git

git --version
git version 1.7.7

1 个答案:

答案 0 :(得分:3)

在shell的给定实例中,二进制文件的路径确实被缓存。清除这个的最简单方法是打开一个新的终端窗口。但您也可以使用内置的hash shell在现有窗口中清除它(有关详细信息,请阅读help hash)。

至于为什么which不同意关于要执行的二进制文件的shell,这是因为which是一个程序,它位于/usr/bin/which并独立于PATH解析type贝壳。如果您想确切了解shell的内容,请使用which代替type -a(并使用{{1}}查看给定命令的所有可能结果。)