zsh compinit: insecure directories, run compaudit for list解决办法

2022年1月12日16:40:13 发表评论 1,526 ℃

最近在使用zsh,添加自动补全功能以后,切换zsh或者启动zsh终端的时候,总是提示:

zsh compinit: insecure directories, run compaudit for list解决办法

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

执行以后再打开终端测试正常:

zsh compinit: insecure directories, run compaudit for list解决办法

精选全网爆款产品,爆品销量榜单,全场低至0元起,还有更多云产品免费试用,带你0门槛上云

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: