使用fish shell完成AWS CLI命令

问题描述 投票:19回答:4

有没有人能够使用fish shell为AWS CLI设置自动完成功能? AWS文档仅提供bash,tcsh和zsh的指南。

Bash导出由Amazon提供的aws_completer脚本使用的变量COMP_LINECOMP_POINT。有没有鱼的等价物?我是鱼壳的新手,我试试看。

amazon-web-services aws-cli fish tab-completion
4个回答
3
投票

我也希望让他的工作,我已经取得了一些进展,但它并不完美。

首先,我从here看一些建议,这有助于看似如何模拟aws_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)'

但这似乎没有帮助。似乎鱼期望的输出格式与bash不同,因为它的完整性。事实上,fish decimation for the complete builtin doe说它希望有一个空格分隔列表。

所以我尝试用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)'

但这也不起作用。我刚完成一次

这很烦人,我很亲密,但它不起作用!


2
投票

虽然提供的答案没有直接回答关于使用fish的问题;我打算在auto-completionshell的背景下提供答案。

亚马逊推出了一个基于CLI的新工具,该工具由AWSCLI派生。

aws-shell是一个命令行shell程序,它提供了便利和生产力功能,可以帮助AWS命令行界面的新用户和高级用户。主要功能包括以下内容。

模糊自动完成

  • 命令(例如ec2,describe-instances,sms,create-queue)
  • 选项(例如--instance-id,--que-url)
  • 资源标识符(例如Amazon EC2实例ID,Amazon SQS队列URL,Amazon SNS主题名称)enter image description here

动态在线文档

  • 键入enter image description here时会显示命令和选项的文档

执行OS shell命令

  • 使用常见的OS命令,如cat,ls和cp以及管道输入和输出,而无需离开shell enter image description here
  • 将执行的命令导出到文本编辑器要了解更多信息,请查看AWS Command Line Interface blog上的相关博客文章。

enter image description here


0
投票

实际上可以将bash的完成映射到fish的。

the npm completions

然而,写一个真正的鱼脚本可能还是更好(这并不难!)。


-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
© www.soinside.com 2019 - 2024. All rights reserved.