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脚本使用.有没有鱼的等价物?我是鱼壳的新手,我试试看.
在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可以提供正确的补全。
我也想让他工作,我已经取得了一些进展,但并不完美。
首先,我从这里查看一些建议,这有助于了解如何模拟 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)
但这也行不通。我只完成一个
这很烦人,我很接近,但它不起作用!