从OS X命令行调用的ctags不正确

时间:2014-06-09 12:52:21

标签: macos bash path osx-mavericks ctags

我想使用旺盛的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解决了这个问题。据推测,可执行文件的名称已缓存在某个地方,但我怎样才能防止将来发生这种情况?

1 个答案:

答案 0 :(得分:8)

你不能阻止 shell缓存命令的位置;这通常是出于性能原因而完成的。但是,您可以强制shell根据需要刷新此缓存。使用bashhash命令可用于操作此命令缓存。运行:

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忘记二进制文件的缓存位置。