如何从小写 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 客户端。
我有一个如下所示的 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 客户端。