如何避免执行完整AWS CLI命令时弹出自动补全UI界面
on-partial 自动提示模式异常弹出问题处理 问题说明
AWS CLI 命令补全配置项cli_auto_prompt = on-partial的官方定义行为如下:
on-partial为部分自动提示模式:仅当命令不完整,或因客户端校验错误无法运行时,才会触发自动提示。该模式尤其适用于存在已有脚本、运行手册的场景,或是用户仅希望在使用不熟悉的命令时获得提示,而非执行每条命令都被提示打断的场景。
我在~/.aws/config配置文件中写入如下配置:
[default] region = us-west-2 output = json cli_auto_prompt = on-partial cli_history = enabled cli_timestamp_format = iso8601
其中output、cli_history等其他配置项修改后均可正常生效,但输入无缺失参数的完整命令:
aws iam list-groups
按下回车后依然会弹出补全UI界面,不符合on-partial模式的预期行为,需要调整配置实现:执行完整合法命令时直接运行,不弹出补全UI打断操作。
当前环境信息
$ aws --version aws-cli/2.7.11 Python/3.10.5 Darwin/20.6.0 source/x86_64 prompt/on $ bash --version GNU bash, version 5.1.16(1)-release (x86_64-apple-darwin20.6.0) $ which -a aws /usr/local/bin/aws $ ls -l /usr/local/bin/aws lrwxr-xr-x 1 Tax admin 31 Jun 25 09:50 /usr/local/bin/aws -> ../Cellar/awscli/2.7.11/bin/aws
根因与解决方法
从aws --version输出末尾的prompt/on就能直接定位根因:当前AWS CLI实际生效的自动提示模式是on(全量提示模式,任何命令按回车都会唤起补全UI),而非配置文件中设置的on-partial。
AWS CLI的配置优先级从高到低为:命令行参数 > 环境变量 > 配置文件字段,出现这个问题是因为shell环境里设了优先级更高的AWS_CLI_AUTO_PROMPT环境变量,直接覆盖了配置文件的设置,按以下步骤修复即可:
- 先执行
echo $AWS_CLI_AUTO_PROMPT验证,正常会输出on - 临时修复:执行
unset AWS_CLI_AUTO_PROMPT清除当前shell会话里的这个环境变量,之后再输完整AWS CLI命令就不会被补全UI打断 - 永久修复:检查shell配置文件(包括
~/.bashrc、~/.bash_profile、~/.profile),找到写了export AWS_CLI_AUTO_PROMPT=on的行,要么直接删掉,要么把值改成on-partial,保存后执行source命令重载对应配置文件即可。
要是清完环境变量还偶尔弹UI,那是2.7.x版本AWS CLI的已知bug:这个版本对部分没有必填参数的列表类命令(比如测试用的iam list-groups)存在参数完整性误判,把AWS CLI升到2.10及以上的稳定版本就能解决这个判定问题。
内容的提问来源于stack exchange,提问作者orome

