使用fish shell完成AWS CLI命令

Osi*_*Osi 20 tab-completion amazon-web-services fish aws-cli

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

Bash导出变量COMP_LINE,COMP_POINT并由亚马逊提供的aws_completer脚本使用.有没有鱼的等价物?我是鱼壳的新手,我试试看.

tmi*_*hel 8

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

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

complete -c aws -f -a "(__fish_complete_aws)"
Run Code Online (Sandbox Code Playgroud)

把它放在一个文件中,$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
Run Code Online (Sandbox Code Playgroud)

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


Dav*_*sel 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)'
Run Code Online (Sandbox Code Playgroud)

这主要有效,但我得到了虚假的额外斜线,所以如果我尝试完成“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\
Run Code Online (Sandbox Code Playgroud)

在我看来,有一个尾随空格字符,但我尝试使用 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)'
Run Code Online (Sandbox Code Playgroud)

但这似乎没有帮助。似乎 fish 期望与 bash 不同的输出格式,因为它更完整。而且确实完整内置doefish decimation说它需要一个空格分隔的列表。

所以我尝试用 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)'
Run Code Online (Sandbox Code Playgroud)

但这也行不通。我只完成一个

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

  • 使用 sed 去除尾随的空白字符对我有用,但是在执行此操作时您不想使用鱼子外壳,因为这最终会将输出连接成一个单一的巨大参数。这对我有用:`complete --command aws --no-files --arguments '(begin; set --local --export COMP_SHELL fish; set --local --export COMP_LINE (commandline); /usr/local/ bin/aws_completer | sed \'s/ $//\'; end)'` (6认同)

fah*_*aho 0

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

请参阅npm 完成情况

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