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.