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?

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}

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}

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}
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.