我有一个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到等号。
这个正则表达式出了什么问题?还有,有一种更简单的方法吗?
答案 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
。