Setzen der jq-Ausgabe auf eine Bash-Variable

17

Ich benutze Curl, um JSON von einer Rest-API wie dieser zurückzubekommen:

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

das erzeugt den Wert, den ich brauche. Jedoch; wenn ich den obigen Code so ändere, dass er so aussieht:

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

Produziert nichts. Wie kann ich dies ändern, damit der Benutzernamenvariablen die Ausgabe zugewiesen wird?

Jymbo
quelle

Antworten:

14

Der Code wurde geändert und es hat funktioniert:

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
quelle
1
Ich bekomme Syntax error: redirection unexpected(mit oder ohne, echowie die andere Antwort andeutet.
Matt B
1
@MattB, Sie versuchen, den <<<Operator in einer aschebasierten Shell zu verwenden, die ihn nicht unterstützt. Selbst in zsh oder bash, die diesen Operator unterstützen, macht dieser Code keinen Sinn. Es leitet den Standard um, von echodem es nicht gelesen wird. Es ist ein Wunder, wie diese Antwort 10 positive Stimmen erhielt.
Stéphane Chazelas
4

Dies funktioniert nur, wenn Sie das "Echo" in der zweiten Zeile verlieren.

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

Sie können es in einen Einzeiler umwandeln als:

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