有没有人能够使用鱼壳为 AWS CLI 设置自动完成功能?AWS 文档仅提供 bash、tcsh 和 zsh 的指南。
Bash 导出变量COMP_LINE
并由COMP_POINT
Amazon 提供的 aws_completer 脚本使用。有没有鱼的等价物?我是新来的鱼壳,我正在试一试。
有没有人能够使用鱼壳为 AWS CLI 设置自动完成功能?AWS 文档仅提供 bash、tcsh 和 zsh 的指南。
Bash 导出变量COMP_LINE
并由COMP_POINT
Amazon 提供的 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)"
把它放在一个文件中$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
可以提供正确的补全。
我也想让他工作,我已经取得了一些进展,但并不完美。
首先,我从这里查看一些建议,这有助于了解如何模拟 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)'
但这也不起作用。我只完成一个
这很烦人,我很接近,但它不起作用!
虽然提供的答案没有直接回答有关 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 命令行界面博客上的相关博文。
将此行添加到您的.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 的评论。
我在 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