Establecer la salida jq en una variable Bash

17

Estoy usando curl para recuperar JSON de una 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 produce el valor que necesito. Sin embargo; cuando cambio el código anterior para que se vea así:

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

No produce nada ¿Cómo puedo cambiar esto para que la variable de nombre de usuario tenga asignada la salida?

jymbo
fuente

Respuestas:

14

Cambió el código a esto y funcionó:

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
fuente
1
Obtengo Syntax error: redirection unexpected(con o sin el echocomo sugiere la otra respuesta.
Matt B
1
@MattB, está intentando utilizar el <<<operador en un shell basado en cenizas que no lo admite. En cualquier caso, incluso en zsh o bash que admiten ese operador, ese código no tiene ningún sentido. Redirige el stdin del echocual no lo lee. Es sorprendente cómo esa respuesta logró obtener 10 votos a favor.
Stéphane Chazelas
4

Esto solo funciona si pierde el "eco" en la segunda línea.

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
fuente
0

Puede convertirlo en un solo revestimiento como:

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