这意味着什么?我该如何解决?

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

运行compaudit将返回如下结果:

There are insecure directories:
/usr/local/share/zsh/site-functions

当前回答

我没有看到任何关于这个主题的自制信息的回答:https://docs.brew.sh/Shell-Completion#configuring-completions-in-zsh

要使Homebrew的完成功能在zsh中可用,必须在初始化zsh的完成功能之前在FPATH上获得Homebrew管理的zsh site-functions。将以下内容添加到~/。zshrc中:

if type brew &>/dev/null; then
  FPATH=$(brew --prefix)/share/zsh/site-functions:$FPATH

  autoload -Uz compinit
  compinit
fi

这必须在调用compinit之前完成。

这为我解决了问题,无需手动更改所有权或其他方式。

其他回答

注:此答案为2012年数据。


这为我解决了问题:

$ sudo chmod -R 755 /usr/local/share/zsh/site-functions

出处:zsh邮件列表上的一个帖子


编辑:正如@biocyberman在评论中指出的那样。您可能还需要更新站点函数的所有者:

$ sudo chown -R root:root /usr/local/share/zsh/site-functions

在我的机器(OSX 10.9)上,我不需要这样做,但YMMV。

EDIT2:在OSX 10.11上,只有这样才能工作:

$ sudo chmod -R 755 /usr/local/share/zsh
$ sudo chown -R root:staff /usr/local/share/zsh

另外,user:staff是OSX上正确的默认权限。

一旦你了解了原因,解决方案是微不足道的和明确的。

原因:compaudit输出的目录有group或other写权限(world-writable);或者这些文件属于root或你自己以外的其他人。 例如:在我的案例中,compaudit给了我:

% compaudit 
There are insecure directories:
/usr/local/share/zsh/site-functions
/usr/local/share/zsh

如果我们列出这些文件/目录的权限(在本例中)

% ls -lh /usr/local/share 
total 0
drwxr-xr-x  12 chbrandt  admin   384B Aug 14 10:45 aclocal
drwxr-xr-x   8 chbrandt  admin   256B Aug 14 10:45 doc
drwxr-xr-x   3 chbrandt  admin    96B Jul 24 21:00 fish
lrwxr-xr-x   1 chbrandt  admin    36B Aug 14 10:45 gettext -> ../Cellar/gettext/0.21/share/gettext
lrwxr-xr-x   1 chbrandt  admin    41B Aug 14 10:45 gettext-0.21 -> ../Cellar/gettext/0.21/share/gettext-0.21
lrwxr-xr-x   1 chbrandt  admin    37B Aug 14 10:45 gtk-doc -> ../Cellar/libidn2/2.3.0/share/gtk-doc
drwxr-xr-x   9 chbrandt  admin   288B Aug 14 10:45 info
drwxr-xr-x  58 chbrandt  admin   1.8K Aug 14 10:45 locale
lrwxr-xr-x   1 chbrandt  admin    41B Jul 27 17:12 luajit-2.0.5 -> ../Cellar/luajit/2.0.5/share/luajit-2.0.5
drwxr-xr-x   5 chbrandt  admin   160B Jul 27 17:12 man
lrwxr-xr-x   1 chbrandt  admin    33B Aug 14 10:45 nvim -> ../Cellar/neovim/0.4.4/share/nvim
drwxrwxr-x   3 chbrandt  admin    96B Jul 24 20:57 zsh
%
% ls -lh /usr/local/share/zsh 
total 0
drwxrwxr-x  4 chbrandt  admin   128B Jul 24 21:00 site-functions
%
% ls -lh /usr/local/share/zsh/site-functions 
total 0
lrwxr-xr-x  1 chbrandt  admin    39B Jul 24 21:00 _brew -> ../../../Homebrew/completions/zsh/_brew
lrwxr-xr-x  1 chbrandt  admin    44B Jul 24 21:00 _brew_cask -> ../../../Homebrew/completions/zsh/_brew_cask

现在我们很容易发现问题,不是吗?注意zsh/和zsh/site-functions目录与其他目录的区别… zsh不支持允许管理组修改它们的“w”。

解决方案:关闭组可写权限!

% chmod g-w /usr/local/share/zsh 
% chmod g-w /usr/local/share/zsh/site-functions 

就是这样!你可以出发了。打开一个新终端,你应该不会再看到“zsh compinit: insecure directories”消息了;)

接受的答案在macOs Sierra(10.12.1)上不适用。必须从/usr/local递归吗

cd /usr/local
sudo chown -R <your-username>:<your-group-name> *

注意:你可以用whoami获取你的用户名,用id -g获取你的组

发送一个y字符到脚本的输入流使用compinit,以自动回答忽略不安全的目录和文件,并继续[y]或abort compinit [n]?问题

echo "y" > source <GOOGLECLOUDSDK>/ complete .zsh.inc .

解决方案是有用的

不能对文件夹进行所有权/访问更改 当你不能使用-u选项来删除警告时(可能是因为你自己没有显式地调用'compinit',但它是由你调用的脚本调用的)

备注:它不会修复问题,只是隐藏了警告(与这里涉及删除“组写访问权限”或“更改所有权到根”的其他答案相反)。

这适用于我的Mac,因为High Sierra更新。

取消组写权限:

sudo chmod g-w /usr/local/share/zsh/site-functions
sudo chmod g-w /usr/local/share/zsh

最好将更改限制在zsh目录中。