🐳

MontereyでDockerのcommand補完する方法

2022/03/01に公開約1,500字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/となっているのも影響しているのか…と思いつつ別の方法を検索。

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

  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

さらに、.zshrcに下記を追加

~/.zshrc
if [ -e ~/.zsh/completions ]; then
    fpath=(~/.zsh/completions $fpath)
fi

Discussion

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

ログインするとコメントできます