Bash 从脚本导出 credstash 值
Bash export credstash values from script
所以我正在尝试实现一个构建脚本,该脚本从 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
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
所以我正在尝试实现一个构建脚本,该脚本从 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
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