所以我试图实现一个构建脚本,从DynamoDB中下载我们的credstash密钥,然后在运行脚本的环境中设置它们,我需要之后的命令才能访问这些环境变量来编译一些YML。
这就是我所拥有的(有点工作):
#!/bin/bash
creds=$(credstash getall)
declare -a arrayKeys=($(echo $creds | ./jq '[to_entries[] | .key]' | tr ',' '\n'))
for ((i=1; i<(${#arrayKeys[*]} -1); i++));
do
key=$( printf '%s:' "${arrayKeys[i]}" )
key=${key%:}
export key="foo"
done
这实际上似乎已经完成但是当我在看不到我之后的键之后我做了printenv时,请注意我将它们设置为值foo只是为了得到迭代器的东西工作,当它完成时,它将使用JQ从我之前获取的JSON中提取值。
示例JSON:
{
"db.password" : "Some password",
"db.username" : "Some username"
}
请注意,正如您可能会说的那样,我没有bash脚本专家所以这就是我在做了一些阅读之后拼凑起来的。
修改
所以在下面的评论之后,我现在得到了:
#!/bin/bash
creds=$(credstash getall)
declare -a arrayKeys=($(echo $creds | ./jq --raw-output '[to_entries[] | .key]' | tr ',' '\n'))
for ((i=1; i<(${#arrayKeys[*]} -1); i++));
do
key=$( printf '%s:' "${arrayKeys[i]}" )
key=${key%:}
export eval $key='foo'
done
哪个收益率:
bash: export: `"db.username"=foo': not a valid identifier
答案 0 :(得分:1)
bash
+ jq
解决方案:
while read -r key val; do
declare -x "$key"="$val"
done < <(jq -r 'to_entries[] | [(.key | gsub("\\.";"_")), .value] | @tsv' <<<"$creds")
检查声明的变量:
$ echo "$db_username"
Some username