Bash экспортирует значения credstash из скрипта
Поэтому я пытаюсь реализовать сценарий сборки, который извлекает наши ключи credstash из DynamoDB и затем устанавливает их в среде, в которой выполняется сценарий. Мне нужно, чтобы впоследствии у команд был доступ к этим переменным среды для компиляции некоторого 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
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