最近在使用zsh,添加自动补全功能以后,切换zsh或者启动zsh终端的时候,总是提示:
zsh compinit: insecure directories, run compaudit for list. Ignore insecure directories and continue [y] or abort compinit [n]?
导致每次都要手动确认一次,非常麻烦。
为什么会导致每次提示这个呢?
主要是因为安装完zsh-completions以后,在.zshrc文件添加了下面代码:
if type brew &>/dev/null; then FPATH=$(brew --prefix)/share/zsh-completions:$FPATH autoload -Uz compinit compinit fi
是什么原因会提示目录不安全呢?
man zshcompsys揭示了有关安全检查的以下内容:
出于安全原因,compinit 还会检查完成系统是否会使用不属于 root 或当前用户的文件,或者是全局或组可写目录中的文件,或者不属于 root 或当前用户的文件。如果找到这样的文件或目录,compinit 将询问是否真的应该使用完成系统。要避免这些测试并使所有找到的文件无需询问即可使用,请使用选项 -u,并让 compinit 静默忽略所有不安全的文件和目录,请使用选项 -i。当给出 -C 选项时,此安全检查将完全跳过。
可以通过运行函数 compaudit 随时重试安全检查。
运行compaudit命令返回不安全的目录:
There are insecure directories: /usr/local/share
解决方案就是去掉这些不安全目录属组的写入权限:
compaudit | xargs chmod g-w
也可以单个文件夹删除权限:
sudo chmod g-w /usr/local/share/zsh
执行以后再打开终端测试正常: