【问题标题】:Why or how is it that is my path is not being respected MacOSX? [closed]为什么或如何是我的路径不被尊重 MacOSX? [关闭]
【发布时间】:2021-01-22 03:25:18
【问题描述】:

二进制文件如何“默认”执行——即。在我的路径中找到的第一个,由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 哈希。 (来自: 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

【问题讨论】:

  • 'rehash' 可能是你需要的。

标签: macos osx-leopard


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-17
    • 1970-01-01
    • 2013-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-06
    • 1970-01-01
    相关资源
    最近更新 更多