如何从小写 aws 凭据文件创建大写 AWS 环境变量?

How to create uppercase AWS environment vars from lowercase aws credentials file?

我有一个如下所示的 AWS 凭证文件:

cat ~/.aws/credentials
[default]
aws_access_key_id = M0NKEY2TH3B1RD
aws_secret_access_key = yabbadabbadabbadabbadabbadabbadabbasaidthe

和 Linux 上的一个应用程序需要环境变量中的这些凭据:

AWS_ACCESS_KEY_ID=M0NKEY2TH3B1RD
AWS_SECRET_ACCESS_KEY=yabbadabbadabbadabbadabbadabbadabbasaidthe

我知道让这些变量在 copy/paste 到 .bashrc 或一些类似的地方总是可用是微不足道的,但我宁愿阅读已经存在的文件,然后只是 -在需要时及时。

这可能表明,作为一个小脚本或别名:

env $(sed -e 's/ //g' .aws/credentials | tail -n +2 | sed -e 's/[^=]+/\U&/') app

不幸的是,它仍然设置小写环境变量,而不是根据需要设置大写环境变量。

aws_access_key_id=M0NKEY2TH3B1RD
aws_secret_access_key=yabbadabbadabbadabbadabbadabbadabbasaidthe

$() 中的命令首先删除凭据中的空格,然后跳过行 "[default]",但不幸的是并没有将左边的所有内容都大写为等号。

正则表达式的 "make uppercase"\U& 部分借鉴自 an earlier SO answer,如果提供更简单的内容,则可以正常工作。

echo aws_secret | sed -e 's/.*/\U&/'
AWS_SECRET

我认为可能存在转义问题并尝试 [^\=]+ 而不是 [^=]+ 但这没有帮助。捕获正则表达式似乎不正确,但它应该匹配直到等号的每个字符。

这个正则表达式有什么问题?另外,有没有更简单的方法?

这个有效:

env $(sed -e 's/ //g' .aws/credentials | tail -n +2 | sed -r 's/[^=]+/\U&/')

注意第二个 sed 命令中的 -r

一个失踪的人留下了一条评论,建议 -r,但没有我需要的 match-the-left-hand-side 上下文。原来 -r 通过启用 GNU 扩展修复了它。为什么 \U& 的大写在没有 -r 的情况下也能正常工作,如果这是一个 GNU 扩展,仍然是个谜...

更清晰

env AWS_ACCESS_KEY_ID=$(aws configure get aws_access_key_id) AWS_SECRET_ACCESS_KEY=$(aws configure get aws_secret_access_key) 

这种更直接的方法假定已安装 aws,Amazon Web 服务 python 客户端。