26

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

Bash 导出变量COMP_LINE并由COMP_POINTAmazon 提供的 aws_completer 脚本使用。有没有鱼的等价物?我是新来的鱼壳,我正在试一试。

4

6 回答 6

11

David Roussel的回答的基础上,我编制了以下内容:

function __fish_complete_aws
    env COMP_LINE=(commandline -pc) aws_completer | tr -d ' '
end

complete -c aws -f -a "(__fish_complete_aws)"

把它放在一个文件中$HOME/.config/fish/completions/aws.fish,这样鱼就可以在必要时自动加载它。

aws_completer在它打印的每个选项之后附加一个空格并且被转义,\因此修剪它可以解决尾随反斜杠。

现在我们可以使用以下命令测试完成情况:

> complete -C'aws co'
codebuild
codecommit
codepipeline
codestar
cognito-identity
cognito-idp
cognito-sync
comprehend
comprehendmedical
connect
configure
configservice

如果您向后移动光标,请使用commandline -c帮助,因为它会在光标处切断命令行,因此aws_completer可以提供正确的补全。

于 2019-11-21T21:06:39.327 回答
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)'

但这也不起作用。我只完成一个

这很烦人,我很接近,但它不起作用!

于 2016-01-07T11:56:32.633 回答
4

虽然提供的答案没有直接回答有关 using 的问题fish;我打算在auto-completion&的上下文中提供帮助的答案shell

亚马逊推出了一个新的基于 CLI 的工具,该工具源自AWSCLI

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

模糊自动完成

  • 命令(例如 ec2、describe-instances、sms、create-queue)
  • 选项(例如--instance-ids、--queue-url)
  • 资源标识符(例如 Amazon EC2 实例 ID、Amazon SQS 队列 URL、Amazon SNS 主题名称) 在此处输入图像描述

动态内联文档

  • 键入时会显示命令和选项的文档 在此处输入图像描述

执行 OS shell 命令

  • 使用常见的操作系统命令,例如 cat、ls 和 cp,并在不离开 shell 的情况下使用管道输入和输出 在此处输入图像描述
  • 将执行的命令导出到文本编辑器 要了解更多信息,请查看AWS 命令​​行界面博客上的相关博文。

在此处输入图像描述

于 2016-01-05T09:07:46.520 回答
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 回答
0

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

查看npm 完成

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

于 2015-09-29T15:23:05.097 回答
-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 回答