我想使用旺盛的ctags。但是,在OS X 10.9上,默认似乎是调用不同的二进制文件,
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ctags
我可以轻松地从MacPorts获得充满活力的ctags
sudo port install ctags
我的路径似乎设置正确,允许在/opt/local/bin
(我路径中的第一个位置)中使用新二进制文件
$ which ctags
/opt/local/bin/ctags
但是,执行ctags
仍会调用XCode.app
内的版本。我当然可以使用
which ctags
并用完整的路径调用正确的二进制文件,但我很困惑为什么路径似乎没有像它应该的那样工作。
为什么which
的结果实际上没有指定在这种情况下将执行哪个二进制文件?
更新:启动新的bash shell解决了这个问题。据推测,可执行文件的名称已缓存在某个地方,但我怎样才能防止将来发生这种情况?
答案 0 :(得分:8)
你不能阻止 shell缓存命令的位置;这通常是出于性能原因而完成的。但是,您可以强制shell根据需要刷新此缓存。使用bash
,hash
命令可用于操作此命令缓存。运行:
hash mycommand
将导致shell更新mycommand
的存储位置。例如,如果我的$PATH
以:
$HOME/bin/A:$HOME/bin/B
我在$ HOME / bin / B中添加了一个名为mycommand
的卖家脚本:
#!/bin/sh
echo This is B.
然后运行mycommand
,我得到:
$ mycommand
This is B.
如果我在$HOME/bin/A
中创建一个同名的脚本:
#!/bin/sh
echo This is A.
然后运行mycommand
,我们看到bash
正在使用缓存位置:
$ mycommand
This is B.
如果我然后使用hash
命令,我们会看到bash
更新位置:
$ hash mycommand
$ mycommand
This is A.
更改PATH
环境变量也会导致bash
忘记二进制文件的缓存位置。