Définition de la sortie jq sur une variable Bash

17

J'utilise curl pour récupérer JSON à partir d'une API de repos comme celle-ci:

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

ce qui produit la valeur dont j'ai besoin. Toutefois; quand je change le code ci-dessus pour ressembler à ceci:

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

Ne produit rien. Comment puis-je changer cela pour que la variable de nom d'utilisateur reçoive la sortie?

jymbo
la source

Réponses:

14

Changé le code en cela et cela a fonctionné:

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
la source
1
Je reçois Syntax error: redirection unexpected(avec ou sans le echocomme le suggère l'autre réponse.
Matt B
1
@MattB, vous essayez d'utiliser l' <<<opérateur dans un shell à base de cendres qui ne le prend pas en charge. Dans tous les cas, même dans zsh ou bash qui prennent en charge cet opérateur, ce code n'a aucun sens. Il redirige le stdin echodont il ne le lit pas. C'est une merveille comment cette réponse a réussi à obtenir 10 votes positifs.
Stéphane Chazelas
4

Cela ne fonctionne que si vous perdez "l'écho" sur la deuxième ligne.

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

Vous pouvez le convertir en un revêtement comme:

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