最近在使用zsh,添加自動(dòng)補(bǔ)全功能以后,切換zsh或者啟動(dòng)zsh終端的時(shí)候,總是提示:
zsh compinit: insecure directories, run compaudit for list. Ignore insecure directories and continue [y] or abort compinit [n]?
導(dǎo)致每次都要手動(dòng)確認(rèn)一次,非常麻煩。
為什么會(huì)導(dǎo)致每次提示這個(gè)呢?
主要是因?yàn)榘惭b完zsh-completions以后,在.zshrc文件添加了下面代碼:
if type brew &>/dev/null; then FPATH=$(brew --prefix)/share/zsh-completions:$FPATH autoload -Uz compinit compinit fi
是什么原因會(huì)提示目錄不安全呢?
man zshcompsys揭示了有關(guān)安全檢查的以下內(nèi)容:
出于安全原因,compinit 還會(huì)檢查完成系統(tǒng)是否會(huì)使用不屬于 root 或當(dāng)前用戶的文件,或者是全局或組可寫目錄中的文件,或者不屬于 root 或當(dāng)前用戶的文件。如果找到這樣的文件或目錄,compinit 將詢問(wèn)是否真的應(yīng)該使用完成系統(tǒng)。要避免這些測(cè)試并使所有找到的文件無(wú)需詢問(wèn)即可使用,請(qǐng)使用選項(xiàng) -u,并讓 compinit 靜默忽略所有不安全的文件和目錄,請(qǐng)使用選項(xiàng) -i。當(dāng)給出 -C 選項(xiàng)時(shí),此安全檢查將完全跳過(guò)。
可以通過(guò)運(yùn)行函數(shù) compaudit 隨時(shí)重試安全檢查。
運(yùn)行compaudit命令返回不安全的目錄:
There are insecure directories: /usr/local/share
解決方案就是去掉這些不安全目錄屬組的寫入權(quán)限:
compaudit | xargs chmod g-w
也可以單個(gè)文件夾刪除權(quán)限:
sudo chmod g-w /usr/local/share/zsh
執(zhí)行以后再打開(kāi)終端測(cè)試正常: