🐳
MontereyでDockerのcommand補完する方法
MontereyでDocker commandのzsh-completion対応しようと思ったらうまくいかなかった話
どうやら、Montereyから/usr/配下のpermissionがさらに厳しくなっているもよう。
Docker公式の方法で説明されているとおりシンボリックリンク張る方法を試そうとしたところ、is operation not permitted
エラーで実行できず。iTermのフルディスクアクセスは許可にしているにもかかわらず。
公式の方法はこちら
In Zsh, the completion system takes care of things. To activate completion for Docker commands, these files need to be copied or symlinked to your Zsh site-functions/ directory. For example, if you installed Zsh via Homebrew:
zsh
etc=/Applications/Docker.app/Contents/Resources/etc
ln -s $etc/docker.zsh-completion /usr/local/share/zsh/site-functions/_docker
ln -s $etc/docker-compose.zsh-completion /usr/local/share/zsh/site-functions/_docker-compose
自分の環境では(brew install
ではなく、zinit
で zsh-completion
をインストールしているで)zsh/site-functions/
の場所が、公式で示されている例の /usr/local/share/zsh/site-functions/
ではなく、/usr/share/zsh/site-functions/
となっているのも影響しているのか…と思5つ別の方法を検索。
以下の方法で対応可能だった。
- completionsの補完スクリプト用のディレクトリを作成
- そこに
docker.zsh-completion
とdocker-compose.zsh-completion
のシンボリックリンクを、それぞれ_docker
および_docker-compose
として作成 -
.zshrc
で補完スクリプト用のディレクトリをfpath
指定
zsh
mkdir /.zsh/completions
ln -s /Applications/Docker.app/Contents/Resources/etc/docker.zsh-completion ~/.zsh/completions/_docker
ln -s /Applications/Docker.app/Contents/Resources/etc/docker-compose.zsh-completion ~/.zsh/completions/_docker-compose
- さらに、.zshrcに下記を追加する
~/.zshrc
if [ -e ~/.zsh/completions ]; then
fpath=(~/.zsh/completions $fpath)
fi
Discussion
あ、実は
/usr/share/zsh/site-functions/
をchmod
すればよかったのかしら。