有没有人能够使用fish shell为AWS CLI设置自动完成功能? AWS文档仅提供bash,tcsh和zsh的指南。
Bash导出由Amazon提供的aws_completer脚本使用的变量COMP_LINE
和COMP_POINT
。有没有鱼的等价物?我是鱼壳的新手,我试试看。
我也希望让他的工作,我已经取得了一些进展,但它并不完美。
首先,我从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)'
但这也不起作用。我刚完成一次
这很烦人,我很亲密,但它不起作用!
虽然提供的答案没有直接回答关于使用fish
的问题;我打算在auto-completion
和shell
的背景下提供答案。
亚马逊推出了一个基于CLI的新工具,该工具由AWSCLI派生。
aws-shell是一个命令行shell程序,它提供了便利和生产力功能,可以帮助AWS命令行界面的新用户和高级用户。主要功能包括以下内容。
模糊自动完成
- 命令(例如ec2,describe-instances,sms,create-queue)
- 选项(例如--instance-id,--que-url)
- 资源标识符(例如Amazon EC2实例ID,Amazon SQS队列URL,Amazon SNS主题名称)
动态在线文档
执行OS shell命令
- 使用常见的OS命令,如cat,ls和cp以及管道输入和输出,而无需离开shell
- 将执行的命令导出到文本编辑器要了解更多信息,请查看AWS Command Line Interface blog上的相关博客文章。
我在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