Ustawienie wyjścia jq na zmienną Bash

18

Korzystam z curl, aby odzyskać JSON z pozostałego interfejsu API w następujący sposób:

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

co daje wartość, której potrzebuję. Jednak; kiedy zmieniam powyższy kod, aby wyglądał tak:

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

Nic nie produkuje. Jak mogę to zmienić, aby zmienna nazwy użytkownika otrzymała dane wyjściowe?

jymbo
źródło

Odpowiedzi:

14

Zmieniłem kod na to i działało:

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
źródło
1
Rozumiem Syntax error: redirection unexpected(z echodrugą lub bez, jak sugeruje druga odpowiedź)
Mat. B
2
@MattB, próbujesz użyć <<<operatora w powłoce opartej na popiele, która go nie obsługuje. W każdym razie, nawet w zsh lub bash, które obsługują tego operatora, ten kod nie ma żadnego sensu. Przekierowuje standardowe wejście, echoktórego nie czyta. To dziwne, jak ta odpowiedź zdołała uzyskać 10 głosów pozytywnych.
Stéphane Chazelas
4

Działa to tylko wtedy, gdy utracisz „echo” w drugiej linii.

content=$(curl -s  -X GET -H "Header:Value" http://127.0.0.1:8200/etc) 
username=$( echo jq -r  '.data.value' <<< "${content}" ) 
echo ${username}
Anonimowy
źródło
0

Możesz przekonwertować go na jedną wkładkę jako:

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