Estou tentando executar este código:
while read Item; do
export environmentVariables="$environmentVariables\n - $Item"
done <<< "$(
cat /LocalSecrets/EnvironmentVariables.json |
jq -r 'to_entries[] | "\(.key)=\(.value)"' |
)"
Eu tenho um arquivo JSON simples em /LocalSecrets/EnvironmentVariables.json
. É um objeto JSON simples de par chave/valor:
{
"FirstKey": "FirstValue",
"SecondKey": "SecondValue",
"ThirdKey": "ThirdValue"
}
E eu quero lê-lo usando jq
e anexá-los todos a uma variável de shell $environmentVariables
como:
FirstKey=FirstValue
SecondKey=SecondValue
ThirdKey=ThirdValue
Mas como jq
precisa de aspas duplas em seu comando e preciso usar heredoc para preservar o $environmentVariables
shell atual no loop, estou preso. Esse código não é executado e tem erros sintáticos.
O que devo fazer? Estou aberto a outras soluções também.
Na verdade, você colocou aspas duplas corretamente dentro do seu heredoc. Mas o último
|
não é necessário, gera erro de sintaxe.A primeira atribuição de parâmetro fornece uma nova linha extra, mas o seguinte deve funcionar. Usando heredoc:
O mesmo, mas usando a substituição de processo:
<(commands)
é uma substituição de processo , o resultado da execução dos comandos aparece como um nome de arquivo especial e é transmitidowhile
com um simples redirecionamento de entrada<
.Alternativamente, você pode usar um pipe simples, mas instruir o shell a executar seu último elemento (
while
) no ambiente atual do shell, permitindo preservar o valor da sua variável:Além disso, se você realmente precisar de caracteres de nova linha em sua variável, e não literalmente
\n
de caracteres, basta fazer: