Jq çıkışını Bash Değişkenine Ayarlama


18

Kıvırmak JSON geri böyle bir dinlenme api almak için kullanıyorum:

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

ihtiyacım olan değeri üretir. Ancak; yukarıdaki kodu aşağıdaki gibi değiştirmek için:

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

Hiçbir şey üretmez. Bunu, kullanıcı adı değişkenine çıktı atanacak şekilde nasıl değiştirebilirim?

Yanıtlar:


14

Kodu buna değiştirdi ve işe yaradı:

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
Ben olsun Syntax error: redirection unexpectedveya olmasın ( echo. Diğer cevap da anlaşılacağı gibi
Matt B

2
@MattB, <<<operatörü desteklemeyen kül bazlı bir kabukta kullanmaya çalışıyorsunuz . Her durumda, bu operatörü destekleyen zsh veya bash'da bile, bu kodun bir anlamı yoktur. Onu echookumaz stdin yönlendirir . Bu cevabın nasıl 10 oy almayı başardığı şaşılacak bir şey.
Stéphane Chazelas

4

Bu sadece ikinci satırdaki "eko" yu kaybederseniz çalışır.

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

Tek bir astara şu şekilde dönüştürebilirsiniz:

username=$( curl -s  -X GET -H "Header:Value" http://127.0.0.1:8200/etc |  jq -r  '.data.value' ) 
echo ${username}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.