【问题标题】:Incorrect ctags called from OS X command line从 OS X 命令行调用的 ctags 不正确
【发布时间】:2014-07-30 00:29:27
【问题描述】:

我想使用 exuberant 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 解决了这个问题。大概可执行文件的名称被缓存在某个地方,但我怎样才能防止这种情况在未来发生呢?

【问题讨论】:

    标签: macos bash path osx-mavericks ctags


    【解决方案1】:

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

    hash mycommand
    

    将导致外壳更新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 忘记二进制文件的缓存位置。

    【讨论】:

      最近更新 更多