26

fish shell で AWS CLI のオートコンプリートをセットアップできた人はいますか? AWS のドキュメントでは、bash、tcsh、および zsh のガイドのみが提供されています。

Bash は変数COMP_LINEをエクスポートCOMP_POINTし、Amazon が提供する aws_completer スクリプトによって使用されます。魚に相当するものはありますか?私は魚の殻が初めてで、試してみています。

4

6 に答える 6

5

私も彼を働かせたいと思っており、ある程度の進歩はありましたが、完璧ではありません。

まず、as_completer が期待する bash 環境変数をエミュレートする方法を理解するのに役立つ、ここからいくつかのアドバイスを調べます。

それをまとめると、私はこれを得る:

complete -c aws -f -a '(begin; set -lx COMP_SHELL fish; set -lx COMP_LINE (commandline); /usr/local/bin/aws_completer; end)'

それはほとんど機能しますが、偽の余分なスラッシュが表示されるため、「aws ec2 describe-instances --」を完了しようとすると、次のようになります。

dave@retino ~> aws ec2 describe-instances --
--ca-bundle\             --color\          --filters\               --no-dry-run\        --output\      --region\
--cli-connect-timeout\   --debug\          --generate-cli-skeleton  --no-paginate\       --page-size\   --starting-token\
--cli-input-json\        --dry-run\        --instance-ids\          --no-sign-request\   --profile\     --version\
--cli-read-timeout\      --endpoint-url\   --max-items\             --no-verify-ssl\     --query\

末尾に空白文字があるように見えますが、sed を使用して削除しようとしました:

complete -c aws -f -a '(begin; set -lx COMP_SHELL fish; set -lx COMP_LINE (commandline); echo (/usr/local/bin/aws_completer | sed -e \'s/[ ]*//\') ; end)'

しかし、これは役に立たないようです。fish はコンプリータとして bash とは異なる出力フォーマットを期待しているようです。そして実際、完全なビルトインの魚の間引きは、スペースで区切られたリストを期待していると言っています。

だから私は xargs で行を結合しようとしました:

complete -c aws -f -a '(begin; set -lx COMP_SHELL fish; set -lx COMP_LINE (commandline); echo (/usr/local/bin/aws_completer | sed -e \'s/[ ]*//\') | xargs echo ; end)'

しかし、これもうまくいきません。私はちょうど1つの完了を取得します

これは面倒です、私はとても近くにいますが、うまくいきません!

于 2016-01-07T11:56:32.633 に答える
3

この行を.config/fish/config.fish

complete --command aws --no-files --arguments '(begin; set --local --export COMP_SHELL fish; set --local --export COMP_LINE (commandline); aws_completer | sed \'s/ $//\'; end)'

aws-cli がインストールされていることを確認したい場合:

test -x (which aws_completer); and complete --command aws --no-files --arguments '(begin; set --local --export COMP_SHELL fish; set --local --export COMP_LINE (commandline); aws_completer | sed \'s/ $//\'; end)'

すべてのクレジットはこの問題のスレッドに属し、素晴らしい SO 貢献者 @scooter-dangle によるコメントです。

于 2020-05-15T03:06:53.497 に答える
-1

virtualenv/bin/activate で使用するコマンドは次のとおりです。

complete -C aws_completer aws

aws-cli にも魚のサポートがあるようです。aws-cli で提供されるバンドルされたインストーラーがあり、チェックアウトする価値があるかもしれません: activate.fish。aws コマンドと同じ bin ディレクトリにありました。

例えば:

ubuntu@ip-xxx-xx-x-xx:/data/src$ tail -n1 ~/venv/bin/activate
complete -C aws_completer aws
ubuntu@ip-xxx-xx-x-xx:/data/src$ source ~/venv/bin/activate
(venv) ubuntu@ip-xxx-xx-x-xx:/data/src$ aws s3         <- hitting TAB here
cp        ls        mb        mv        presign   rb        rm        sync      website
(venv) ubuntu@ip-xxx-xx-x-xx:/data/src$ aws s3
于 2016-03-29T03:34:07.230 に答える