我已经对此进行了一些研究,感觉好像我在80%左右,但是由于拆分了一个字符串,因此难以根据需要调整jq输出。
我正在尝试将AWS SSM的JSON输出转换为环境变量。
AWS命令
aws ssm get-parameters-by-path \
--path /qa/es \
--with-decryption \
--query 'Parameters[*].{Name:Name,Value:Value}' \
输出
[
{
"Name": "/qa/es/AWS_ACCESS_KEY_ID",
"Value": "ABC123"
},
{
"Name": "/qa/es/AWS_SECRET_ACCESS_KEY",
"Value": "abcdefghijkl"
},
{
"Name": "/qa/es/ENDPOINT",
"Value": "https://amazonaws.com"
}
]
我从jq所需的输出,请注意,我仅在最后一个/之后的环境变量之后。在某些情况下,可能是/ qa / es / something / nested / ENV_VAR
AWS_ACCESS_KEY_ID=ABC123
AWS_SECRET_ACCESS_KEY=abcdefghijkl
ENDPOINT=https://amazonaws.com
一旦有了这个,我就可以在这里利用答案来设置环境变量。 Exporting JSON to environment variables
我最近的是
jq -r "map(\"\(try(.Name |= split(\"/\")))=\(.Value|tostring)\")|.[]" params.json
哪个给我
{"Name":["","qa","es","AWS_ACCESS_KEY_ID"],"Value":"ABC123"}=ABC123
{"Name":["","qa","es","AWS_SECRET_ACCESS_KEY"],"Value":"abcdefghijkl"}=abcdefghijkl
{"Name":["","qa","es","ENDPOINT"],"Value":"https://amazonaws.com"}=https://amazonaws.com
关闭,但不够关闭!有人可以在这里向我指出正确的方向吗?
答案 0 :(得分:1)
使用-r命令行选项,
.[]
| "\(.Name|split("/")|.[-1])=\(.Value)"
产量:
AWS_ACCESS_KEY_ID=ABC123
AWS_SECRET_ACCESS_KEY=abcdefghijkl
ENDPOINT=https://amazonaws.com
这似乎与您的要求相对应,但是这种方法具有潜在的缺点,即它假定了有关“ =”的内容,因此请小心!
答案 1 :(得分:1)
与之前的注释相同,但使用'@sh'来转义值
| "\(.Name|split("/")|.[-1])=\(.Value | @sh)"