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?

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}

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}

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}
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.