zsh-completionsのエラーを解消する
2020-04-01
zsh の環境でターミナルを立ち上げると,毎回 Insecure completion-dependent directories detected
というエラーが出る問題を解決する方法です.
エラー内容
[oh-my-zsh] Insecure completion-dependent directories detected:
lrwxr-xr-x 1 mktia admin 56 Jun 18 2019 /usr/local/share/zsh/site-functions/_git -> ../../../Cellar/git/2.19.1/share/zsh/site-functions/_git
[oh-my-zsh] For safety, we will not load completions from these directories until
[oh-my-zsh] you fix their permissions and ownership and restart zsh.
[oh-my-zsh] See the above list for directories with group or other writability.
[oh-my-zsh] To fix your permissions you can do so by disabling
[oh-my-zsh] the write permission of "group" and "others" and making sure that the
[oh-my-zsh] owner of these directories is either root or your current user.
[oh-my-zsh] The following command may help:
[oh-my-zsh] compaudit | xargs chmod g-w,o-w
[oh-my-zsh] If the above didn't help or you want to skip the verification of
[oh-my-zsh] insecure directories you can set the variable ZSH_DISABLE_COMPFIX to
[oh-my-zsh] "true" before oh-my-zsh is sourced in your zshrc file.
調べたところによると zsh-completion 関連のエラーで,パーミッションの指定が誤っている際に出るようです.
試したこと
パーミッションに問題があるディレクトリを探す
terminal
$ compaudit
/usr/local/share/zsh/site-funtions/_git
ここのパーミッションがおかしいということで,設定します.
terminal
$ sudo chown [username]:admin /usr/local/share/zsh/site-functions/_git
$ sudo chmod 755 /usr/local/share/zsh/site-functions/_git
設定し直すもエラーは消えず.
環境変数を設定する
ダメな場合は .zshrc に環境変数を書き込む的なことが書かれていたので,これも試しました.
~/.zshrc
ZSH_DISABLE_COMPFIX=true
terminal
$ source ~/.zshrc
直らず.
解決方法
参照元のパーミッションを変更する
よく見ると問題のあるディレクトリはシンボリックリンクになっています.
参照元のディレクトリのパーミッションを調べてみると….
terminal
$ ls -l /usr/local/Cellar/git/2.19.1/share/zsh/site-functions/_git
-rw-r--r-- 1 503 staff 6019 9 28 2018 /usr/local/Cellar/git/2.19.1/share/zsh/site-functions/_git
きっとこれだ.
先ほどと同様に,ディレクトリの所有者は [username]:admin
で 755 に設定したところ,エラーは消えました.