🐳
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/
となっているのも影響しているのか…と思いつつ別の方法を検索。
以下の方法で対応可能だった。
- 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
すればよかったのかしら。