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

时间:2015-12-29 08:15:49

标签: regex sed aws-cli

我有一个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

我理解通过复制/粘贴到.bashrc或类似的地方来使这些变量始终可用是微不足道的,但我宁愿读取已存在的文件,然后只是及时,需要时。

这表明可能是一个小脚本或别名:

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

遗憾的是仍然设置了小写的env变量,而不是根据需要设置UPPERCASE ENV VAR。

aws_access_key_id=M0NKEY2TH3B1RD
aws_secret_access_key=yabbadabbadabbadabbadabbadabbadabbasaidthe

$()中的命令首先修剪凭证中的空格,然后跳过行"[default]",但遗憾的是不会将左边的所有内容大写为等于。

an earlier SO answer借来的正则表达式的“make uppercase”\U&部分,如果给出更简单的东西就可以正常工作。

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

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

这个正则表达式出了什么问题?还有,有一种更简单的方法吗?

1 个答案:

答案 0 :(得分:3)

这有效:

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

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

评论由失踪的人留下,建议-r,但没有我需要的匹配左手边的背景。通过启用GNU扩展,结果-r修复了它。为什么使用\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) 

这种更直接的方法假设已安装了{web}服务python客户端aws