1

因此,我正在尝试实现一个构建脚本,该脚本从 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
4

1 回答 1

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
于 2018-02-18T13:38:46.783 回答