fish shellでaws cliのコマンド補完を設定してみたので設定方法を紹介したいと思います。
環境
Mac Sierra
fish 2.2.0
設定方法
bashやzshについては以下の公式で設定方法が紹介されているのですがfishはありませんでした。
docs.aws.amazon.com
色々調べたところ以下をfishのconfig(~/.config/fish/config.fish)に設定することでコマンド補完ができます。
complete -c aws -f -a '(begin; set -lx COMP_SHELL fish; set -lx COMP_LINE (commandline); /usr/local/bin/aws_completer; end)'
設定後にテストを行ったところ、以下のように補完候補の末尾に何故かバックスラッシュ(\)がセットされてしまいました。
⋊> ~ aws acm\ acm\ ecs\ mobile\ alexaforbusiness\ efs\ mq\ apigateway\ elasticache\ mturk\ application-autoscaling\ elasticbeanstalk\ opsworks\ appstream\ elastictranscoder\ opsworks-cm appsync\ elb\ organizations\ athena\ elbv2\ pinpoint\ autoscaling\ emr\ polly\
そのため、補完はされるのですが、このまま実行してもエラーになるので、いちいちバックスラッシュを消す必要があります。
これではせっかく補完されてもあまり嬉しくないので、回避策がないかさらに調べてみました。
以下のとおり補完プログラムを修正することで対応できました。
■修正ファイル
/usr/local/lib/python2.7/site-packages/awscli/completer.py(パスは環境にあわせてください)
■修正箇所
def complete(cmdline, point): choices = Completer().complete(cmdline, point) #print(' \n'.join(choices)) ← コメントアウト print('\n'.join(choices)) ←追加
なぜかスペースをバックスラッシュとして解釈してしまうようなのでスペースを削除します。
再度テストするとバックスラッシュが除去されています。
⋊> ~ aws acm acm ecs mobile alexaforbusiness efs mq apigateway elasticache mturk application-autoscaling elasticbeanstalk opsworks appstream elastictranscoder opsworks-cm appsync elb organizations athena elbv2 pinpoint autoscaling emr polly
これで快適にコマンド補完できました。
ただし、残念なことにawscliのアップデートの度に修正が必要になりそうです。