Configurando a saída jq como uma variável bash

17

Estou usando curl para recuperar o JSON de uma API de descanso como esta:

content=$(curl -s  -X GET -H "Header:Value" http://127.0.0.1:8200/etc)
echo "${content}"| jq -r '.data.value'

que produz o valor que eu preciso. Contudo; quando altero o código acima para ficar assim:

content=$(curl -s  -X GET -H "Header:Value" http://127.0.0.1:8200/etc)
username=$(echo "${content}"| jq -r '.data.value')
echo $username

Não produz nada. Como posso alterar isso para que a variável de nome de usuário seja atribuída à saída?

jymbo
fonte

Respostas:

14

Alterou o código para isso e funcionou:

content=$(curl -s  -X GET -H "Header:Value" http://127.0.0.1:8200/etc) 
username=$( echo jq -r  '.data.value' <<< "${content}" ) 
echo ${username}
jymbo
fonte
1
Eu recebo Syntax error: redirection unexpected(com ou sem o echoque a outra resposta sugere.
Matt B
1
@ MattB, você está tentando usar o <<<operador em um shell baseado em cinzas que não o suporta. De qualquer forma, mesmo em zsh ou bash que suportam esse operador, esse código não faz sentido. Ele redireciona o stdin do echoqual não o lê. É uma maravilha como essa resposta conseguiu 10 votos positivos.
Stéphane Chazelas
4

Isso só funciona se você perder o "eco" na segunda linha.

content=$(curl -s  -X GET -H "Header:Value" http://127.0.0.1:8200/etc) 
username=$( echo jq -r  '.data.value' <<< "${content}" ) 
echo ${username}
Anônimo
fonte
0

Você pode convertê-lo em um liner como:

username=$( curl -s  -X GET -H "Header:Value" http://127.0.0.1:8200/etc |  jq -r  '.data.value' ) 
echo ${username}
ShahNewazKhan
fonte