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?

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}

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}

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}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.