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?

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}

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}

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}
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.