zsh问题:compinit:503:没有此文件或目录:/usr/local/share/zsh/site-functions/_brew

207

我正在使用苹果 M1 MacBook Pro。

当我安装 oh my zsh 时,在我的 ~/.zshrc 文件中添加export PATH="/opt/homebrew/bin:$PATH",在终端中显示以下错误:

joe :: share/zsh/site-functions » source ~/.zshrc
compinit:503: no such file or directory: /usr/local/share/zsh/site-functions/_brew
compinit:503: no such file or directory: /usr/local/share/zsh/site-functions/_brew_cask

然而,我检查过发现这两个文件确实存在。有人能告诉我问题出在哪里吗?

这是我的~/.zshrc文件:

Last login: Sat Jan 16 14:53:34 on console
compinit:503: no such file or directory: /usr/local/share/zsh/site-functions/_brew
compinit:503: no such file or directory: /usr/local/share/zsh/site-functions/_brew_cask
[oh-my-zsh] Random theme 'jnrowe' loaded
Ξ ~ → cd ~
Ξ ~ → source .zshrc

compinit:503: no such file or directory: /usr/local/share/zsh/site-functions/_brew
compinit:503: no such file or directory: /usr/local/share/zsh/site-functions/_brew_cask
# export MANPATH="/usr/local/man:$MANPATH"
[oh-my-zsh] Random theme 'cypher' loaded
joe :: ~ » chmod 755 /usr/local/share/zsh
chmod 755 /usr/local/share/zsh/site-functions

joe :: ~ » sudo chmod 755 /usr/local/share/zsh
Password:
joe :: ~ » sudo chmod 755 /usr/local/share/zsh/site-functions
joe :: ~ » ls
#ZSH_DISABLE_COMPFIX=true

# If you come from bash you might have to change your $PATH.
# export PATH=$HOME/bin:/usr/local/bin:$PATH

#Homebrew
export PATH="/opt/homebrew/bin:$PATH"
export PATH="/opt/homebrew/sbin:$PATH"
#Homebrew END

#Wget
export LDFLAGS="-L/opt/homebrew/opt/openssl@1.1/lib"
export CPPFLAGS="-I/opt/homebrew/opt/openssl@1.1/include"
#Wget END

 #Path to your oh-my-zsh installation.
export ZSH="/Users/caizhuoyue/.oh-my-zsh"

# Set name of the theme to load --- if set to "random", it will
# load a random theme each time oh-my-zsh is loaded, in which case,
# to know which specific one was loaded, run: echo $RANDOM_THEME
# See https://github.com/ohmyzsh/ohmyzsh/wiki/Themes
ZSH_THEME="random"

"~/.zshrc" 114L, 3999C





您(或者在zsh下运行的用户)是否有读取这些文件的权限? - blami
我认为是这样的,我在这些文件上使用了 chmod 755 - Rachel_Miller
14个回答

501

我有类似的问题。我运行了brew cleanup,解决了符号链接的问题。


15
如果你想运行一个模拟清理,先查看想要的效果:brew cleanup -n - changingrainbows
1
发布时,我认为brew cleanup没有起作用。 - AndrewC
对我来说,brew cleanup 起作用了。你可以在这里阅读更多信息:https://github.com/ohmyzsh/ohmyzsh/issues/9602#issuecomment-768663375 - damisparks

63

我遇到了同样的问题,当我更新我的点文件时注意到了这个问题。

在M1上,我从Intel brew转换到Intel和ARM brew,然后再转换到只有ARM版本。对我来说,问题是由两个符号链接指向不存在的Intel版本而不是ARM版本引起的。

我通过将符号链接更改为指向ARM版本的正确位置来修复它。

ln -fsv /opt/homebrew/completions/zsh/_brew /usr/local/share/zsh/site-functions/_brew

ln -fsv /opt/homebrew/completions/zsh/_brew /usr/local/share/zsh/site-functions/_brew_cask
因此。
lrwxr-xr-x    35 xxxx  2 Jun 16:02  _brew -> /opt/homebrew/completions/zsh/_brew
lrwxr-xr-x    35 xxxx  2 Jun 16:01  _brew_cask -> /opt/homebrew/completions/zsh/_brew

我认为 _brew_cask 指向相同的 _brew 是可以的,因为已经合并了 casks。


1
太好了,不错的发现!在我的M1上为我修复了它。 - jcreamer898
Homebrew zsh 是使用 Homebrew 目录编译的(https://github.com/Homebrew/homebrew-core/blob/c91ac56da0745ebf129d7355887e4978ccec4bfe/Formula/zsh.rb#L45)。您可以在 .zsh 下找到系统、Homebrew、zsh 内置、zsh 第三方(site-functions)和用户本地的 zsh 完成和函数目录。 - AndrewC
1
同时,brew cleanup 在发帖时并未解决该问题。 - AndrewC
1
这应该是M1的被接受答案。brew cleanup对我来说没有用。 - vizFlux
2
固定在 M2 上,尽管我的机器上没有 _brew_cask,但我看到 _brew_services - 我像指示的那样将两者都建立了符号链接,现在错误消息已经消失了。 - tgmerritt
显示剩余7条评论

46

稍微更详细的方法是:

brew doctor
brew cleanup
source ~/.zshrc

或者一行:

brew doctor && brew cleanup && source ~/.zshrc

完成这一步后,您可以查看是否在使用源代码后出现任何错误。


18

@sinestandly上面的答案对我起了作用,其他方法都失败了。我运行了brew install zsh-completions然后运行brew cleanupcleanup停止抛出错误,并且我不再收到错误消息compinit:503: no such file or directory: /usr/local/share/zsh/site-functions/_brew_cask

感谢你,@sinestandly!


我已从英特尔迁移到了苹果芯片(M1),并解决了这个问题。谢谢! brew install zsh-completions brew cleanup - bshears
这是因为zsh-completions实际上重新创建了_brew的符号链接,这与我的答案中提供的替换丢失或不正确的链接相同。然而,由于zsh-completions已经删除了_brew的符号链接,它只使用fpaths。它还删除了一些其他功能,因为它只是重复了brew的操作。以防万一有人发现这个方法不能按预期工作。 - AndrewC

15

在卸载了brew之后,我遇到了这个问题。如果您也遇到了相同的问题,请将其移除:

rm -rf /usr/local/share/zsh/site-functions/_brew

我曾经遇到过类似的错误,虽然与brew无关,但通过sudo rm /usr/share/vendor-completions/_docker命令解决了问题,这是导致错误的那一行。基本上是需要删除一个死链接指针。 - lacostenycoder

12

谢谢。这对我很有用。否则我会遇到错误。 - Jasjeet Kaur
不完全是同一个问题。您应该从compinit收到有关此问题的安全权限警告。上述修复了这个问题。但是,仍然应该可以工作。 - AndrewC

8

解决这个问题最简单的方法是运行: brew cleanup

但是,不要忘记如果您同时保留了arm和x86版本,则使用x86 brew版本来运行此命令。

这是我非常低级的错误,我尝试了很多次使用默认的brew命令(我通过脚本安装了它,并已经链接到新的arm版本),直到最后意识到我需要使用x86 brew来执行cleanup命令。


如果您同时运行两个版本,请使用arch命令来检测体系结构,然后使用if-else语句加载路径、fpaths、符号链接等以匹配所使用的版本,并将所有这些内容放入您的.zshrc文件中,然后打开您的终端应用程序以运行amd64或使用rosetta来加载Intel。实际上,您可以复制终端应用程序并将一个设置为每个版本。只需注意任何后台服务即可。 - AndrewC

4
在我的情况下,所有Homebrew补全都无法使用,这是在Apple Silicon上运行的。Homebrew 3.0.0中从/usr/local移动到/opt/homebrew似乎是问题所在。
我在~/.zshrc中将新目录附加到FPATH中,如下所示:
HOMEBREW_PREFIX=$(brew --prefix)
export FPATH="${HOMEBREW_PREFIX}/share/zsh/site-functions:${FPATH}"

如果使用Oh-My-Zsh,这些行需要放在源OMZ的行之上,因为它会执行自己的完成魔法。还要记得清除您的.zcomdump文件,它将被重新创建。

谢谢!这个完美地运行了。另外需要添加的是,在答案中列出的两行代码之前,您需要添加加载brew的eval(eval "$(/opt/homebrew/bin/brew shellenv)")。 - Eli Smith
嗨,不知何故,在使用苹果芯片的情况下,brew --prefix 仍然返回 /usr/local... 是否有解决问题的方法? - JoZ
这解决了我的错误。谢谢!现在GIT自动完成可以工作了! - Jake

4

结果发现这些文件是其他两个不存在的文件的别名。

这是因为M1 MacBook的Homebrew位于/opt/homebrew/下,但zsh假定它仍然位于/usr/local下。

所以我删除了这两个别名,并创建了新的别名指向实际位置:/opt/homebrew/completions/zsh/_brew/opt/homebrew/completions/zsh/_brew_cask

然后我使用了source ~/.zshrc。没有错误信息。问题解决!


我猜你说“aliases”时是指“symlink”吧?文件没有别名... - user1934428
6
同时,正如在 https://dev59.com/y1EG5IYBdhLWcg3wdOJK#65924342 中所指出的那样,与其手动删除符号链接,更方便/强大的方法是运行 brew cleanup 命令(它将删除任何损坏的符号链接,包括这些)。因此,我认为这应该是被采纳的答案。 - Alexey Orlenko
我删除了符号链接“_brew_cask”,运行了“brew doctor”和“brew cleanup”。对我来说没有其他办法。 - Eric
@user1934428 在Mac OS上,文件有别名。https://support.apple.com/zh-cn/guide/mac-help/create-and-remove-aliases-on-mac-mchlp1046/mac - Ray Baxter
@RayBaxter:有趣。文件别名与符号链接相比有什么区别/优势?为了实现这个目的,我会简单地创建一个符号链接。 - user1934428
@user1934428 我也会使用符号链接。你可以通过用户界面创建别名。 - Ray Baxter

4
brew install zsh-completions

修复了它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接