在我的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,或者更确切地说,我将首先以root身份完成整个安装。但是,在MacOS 10.12中,他们甚至不允许“管理员”完全控制系统,虽然我可以以管理员身份登录,但我甚至不知道root的密码。
这个问题有一个聪明的解决方案吗?或者,我们可以以某种方式教zsh compinit从不问这个烦人的问题,要么接受不安全的目录,要么跳过它们?或者最好以管理员身份登录,只需从site-functions
删除有问题的符号链接?我可以使用完成系统,它不知道如何处理brew
命令。
我发现,错误消息是通过在我的compinit
中调用.zshrc
生成的,并且可以通过传递-i
选项关闭它,即
compinit -i
虽然这解决了这个问题,但是Ortomala Lokni提出的应该使用用户权限安装Homebrew的论点也值得考虑 - 只有Homebrew不允许我这样做;但这是一个单独的主题的主题。
你不应该用sudo安装Homebrew。根据Homebrew FAQ:
Homebrew旨在不使用sudo工作。您可以决定使用它,但我们强烈建议您不要这样做。如果您使用过sudo并遇到错误,那么这很可能就是原因。除非您可以在不使用sudo的情况下从头开始重新安装Homebrew,否则请不要提交错误报告。
解决方案是重新安装没有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."