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
Другие вопросы по тегам