zsh compinit:安装 Homebrew 后 Mac 上的不安全目录错误消息

zsh compinit: insecure directories error message on Mac, after installing Homebrew

在我的 Mac 上安装 Homebrew 和 Homebrew-Cask 之后(作为管理员,用户 ID 'admin',运行 MacOS 10.12.6 ),我收到错误消息

zsh compinit: insecure directories, run compaudit for list.
Ignore insecure directories and continue [y] or abort compinit [n]?

每次我启动 zsh。调查 compaudit 的问题,我发现提到了几个不安全的目录,大多数与 Homebrew 相关 - 例如 /usr/local/share/zsh/site-functions。此目录及其条目具有访问权限 0755,这应该没问题,但是 - 例如 - 条目

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

这是 Homebrew 中定义 zsh 完成的文件的符号链接,拥有者 admin。我的猜测是 zsh 想在这里看到用户 root

如果是 Linux,我会简单地将这些文件的所有者更改为 root,或者更确切地说,我会在第一名。然而,在 MacOS 10.12 中,他们甚至 "administrators" 都不允许完全控制系统,虽然我可以以管理员身份登录,但我什至不知道 root 的密码。

这个问题有什么巧妙的解决办法吗?或者,我们可以教 zsh compinit 以某种方式永远不要问这个恼人的问题,要么接受不安全的目录,要么跳过它们?或者最好以管理员身份登录,然后简单地从 site-functions 中删除有问题的符号链接?我可以接受一个不知道如何处理 brew 命令的完成系统。

您不应该使用 sudo 安装 Homebrew。根据 Homebrew FAQ:

Homebrew is designed to work without using sudo. You can decide to use it but we strongly recommend not to do so. If you have used sudo and run into a bug then this is likely to be the cause. Please don’t file a bug report unless you can reproduce it after reinstalling Homebrew from scratch without using sudo.

解决方案是在不使用 sudo 的情况下重新安装 Homebrew,但用户需要是计算机的管理员,如您在 install script:

中所见
elsif !`dsmemberutil checkmembership -U "#{ENV["USER"]}" -G admin`.include?("user is a member")
  abort "This script requires the user #{ENV["USER"]} to be an Administrator."

我发现,错误消息是由在我的 .zshrc 中调用 compinit 生成的,并且可以通过传递 -i 选项将其关闭,即

 compinit -i

虽然这解决了问题,但 Ortomala Lokni 提出的应该使用用户权限安装 Homebrew 的论点也值得考虑——只是 Homebrew 不允许我这样做;但这是一个单独线程的主题。

我的 Mac 在 macOS Monterey v12.1 上。

我在 brew install zsh-completions 之后收到这条消息,在多次尝试 Whosebug 的答案后,我用 source .zshrccompaudit | xargs chmod g-w,o-w 解决了这个问题。

希望你的问题也能得到解决