我在 osx 上使用 zsh ( 5.4.2_1 与 homebrew 一起安装)有一些奇怪的行为,没有使用路径中第一次出现的可执行文件。
这是场景:
echo $PATH 返回:
/usr/local/Cellar/zplug/HEAD-9fdb388/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
Run Code Online (Sandbox Code Playgroud)
brew在两者中
/usr/local/Cellar/zplug/HEAD-9fdb388/bin
Run Code Online (Sandbox Code Playgroud)
和
usr/local/bin/brew
Run Code Online (Sandbox Code Playgroud)
这通过运行which -a brew返回来确认:
/usr/local/Cellar/zplug/HEAD-9fdb388/bin/brew
/usr/local/bin/brew
Run Code Online (Sandbox Code Playgroud)
但是当我运行which brew它返回时:
/usr/local/bin/brew
Run Code Online (Sandbox Code Playgroud)
并且brew确实运行/usr/local/bin/brew而不是/usr/local/Cellar/zplug/HEAD-9fdb388/bin/brew
当 brew 在路径中较早时怎么会发生这种情况?
帮助表示赞赏。
Sté*_*las 26
which -a cmdcmd在目录中查找所有命名为您具有执行权限的常规文件$path(除了别名、函数、内置函数...)。
Whilewhich cmd返回zsh将运行的命令(which是一个zsh类似于 intcsh但与大多数其他 shell 不同的内置命令)。
zsh,与大多数其他 shell 一样,它会记住hash表中可执行文件的路径,以便$path每次调用它们时不必在所有目录中查找它们。
可以使用命令(标准 POSIX shell 命令)操作该哈希表(在 中的$commands关联数组中公开)。zshhash
如果您已经运行了brew(或者命令which/type/whence brew,将有致敏散列/缓存,或使用的命令完成或任何东西),然后将其加入/usr/local/Cellar/zplug/HEAD-9fdb388/bin或之前/usr/local/Cellar/zplug/HEAD-9fdb388/bin加入$path,zsh就会想起它的路径,并将其存储为$commands[brew]=/usr/local/bin/brew。
在这种情况下,您可以使用hash -r(如在 Bourne shell 中)或rehash(如在 csh 中)zsh 忘记记住的命令(使缓存无效),以便下次查找并在新位置找到它。
| 归档时间: |
|
| 查看次数: |
1131 次 |
| 最近记录: |