しばらく複数環境を運用していてAWS CLIの サブコマンド configure を打つのが辛くなってきたので補完機能をいれてみました。
AWS CLI補完機能の設定手順
Linux
CLIインストール
EC2 のRedhat & Rootユーザーで実施しました。
# yum install -y unzip
# curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
# unzip awscliv2.zip
# ./aws/install
補完機能(completer)も自動的にインストールされます。
# which aws
/usr/local/bin/aws
# which aws_completer
/usr/local/bin/aws_completer
補完機能設定
いつでも補完機能を使用できるようにログイン時に自動で設定されるようにしておきます。
# echo -e "\ncomplete -C '/usr/local/bin/aws_completer' aws" >> .bashrc
# . .bashrc
設定が完了したので試してみます。
サブコマンドの最初の方の文字を入力して TAB を押すと候補が表示されます。aws[space] の状態で何も入力せずTABを押すとサブコマンド全部の候補がでます。238個だと。。
# aws con
configservice configure connect connectparticipant
# aws
Display all 238 possibilities? (y or n)
accessanalyzer deploy kafka redshift
acm detective kendra redshift-data
...
(そしてconfigure がかなり打たないと完全に補完されない。。あまり辛さ変わらなかった。。orz
Mac
CLIインストール
$ curl "https://awscli.amazonaws.com/AWSCLIV2.pkg" -o "AWSCLIV2.pkg"
$ sudo installer -pkg AWSCLIV2.pkg -target /
補完機能設定
Macデフォルトシェルのzshの場合、bashの補完設定用コマンドのcompleteがないので、autoloadで関数として利用できるようにします。
なお autoload では-U を付けてalias誤爆防止したほうがいいようです。
$ cat <<EOF >> .zshrc
autoload -Uz compinit && compinit
autoload -U bashcompinit && bashcompinit
complete -C '/usr/local/bin/aws_completer' aws
EOF
$ source .zshrc
Tips
公式マニュアルの通りMacで
autoload bashcompinit && bashcompinit
のみの設定ですすめると
% source .zshrc
complete:13: command not found: compdef
%
とエラーが出力されました。 調べるとcompdefが
% echo $fpath
/usr/local/share/zsh/site-functions /usr/share/zsh/site-functions /usr/share/zsh/5.7.1/functions
%
/usr/share/zsh/5.7.1/functions 配下のcompinitで定義されていたため bashcompinit(この中でcomplete が呼ばれている) の前に compinit をautoloadすることで解決しました。
またこの記事作成中に気づいたのですが、自分の.zshrcに
autoload -U +X bashcompinit && bashcompinit
complete -o nospace -C /usr/local/bin/terraform terraform
が入ってました。どうやらterraform -install-autocomplete のterraformの補完で入ったようです。
今回は以上です〜ノシ
参考
(´・ω・`)ゞアリガトゴザイマス.。.・゚
公式マニュアル コマンド補完
.zshrcで見かけるautoloadの意味と使い方
zshのcompinitに指定してるautoloadのオプション -Uz について