$ PATH优先级没有被遵循?

时间:2013-01-20 21:36:39

标签: macos unix

不完全确定这是否应该在这里或另一个堆栈交换,但这里是:

从我的shell看到以下输出:

$ echo $PATH
/opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin

$ which vim
/usr/bin/vim

$ /opt/local/bin/vim --version
VIM - Vi IMproved 7.3 (2010 Aug 15, compiled Jan  9 2013 03:19:25)
MacOS X (unix) version
Included patches: 1-244, 246-762

$ vim --version
VIM - Vi IMproved 7.3 (2010 Aug 15, compiled Aug 22 2012 15:36:46)
Compiled by root@apple.com

正如您所看到的,/ opt / local / bin / vim应优先于which vim,因为$ PATH定义,但它没有。

任何人都有线索?


最后,我注意到我的.zshrc中有一个export PATH=....。因此,如果有人遇到同样的问题,请先检查一下;)

1 个答案:

答案 0 :(得分:5)

您是否在此shell会话期间将vim安装到/opt/local/bin? Bash(可能还有其他shell)将路径查找的结果保存到哈希表中。您可以通过询问type vim来验证这一点。这就像which,除了它是一个内置函数,如果它们存在,将返回此哈希表的结果。更有用的是,type准确地返回shell将执行的内容。

您还可以使用hash内置来专门查询已保存的查找。使用hash -t vim查看vim哈希表中的条目,并使用hash -d vim从此哈希表中删除vim,允许shell在{{{{}}中查找下次再次1}}。


我刚刚重新检查了您的原始说明,发现$PATH实际返回了which vim。由于/usr/bin/vim不使用我上面描述的哈希表,这实际上表明您的问题不同。也许你的which在第一个组件中有某种不可见的特征?