🐳

MontereyでDockerのcommand補完する方法

2022/03/01に公開
1

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 ではなく、zinitzsh-completion をインストールしているで)zsh/site-functions/ の場所が、公式で示されている例の /usr/local/share/zsh/site-functions/ ではなく、/usr/share/zsh/site-functions/ となっているのも影響しているのか…と思5つ別の方法を検索。

以下の方法で対応可能だった。

  1. completionsの補完スクリプト用のディレクトリを作成
  2. そこに docker.zsh-completiondocker-compose.zsh-completion のシンボリックリンクを、それぞれ _docker および _docker-compose として作成
  3. .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
  1. さらに、.zshrcに下記を追加する
~/.zshrc
if [ -e ~/.zsh/completions ]; then
    fpath=(~/.zsh/completions $fpath)
fi

Discussion

hyga2chyga2c

あ、実は /usr/share/zsh/site-functions/ chmodすればよかったのかしら。