Как я могу запустить команду bash для каждого объекта json в массиве json с помощью jq? Пока у меня есть это:
cat credentials.json | jq -r '.[] | .user, .date, .email' | mycommand -u {user} -d {date} -e {email}
Похоже, это не работает. Как я могу взять параметры из массива json в мою команду?
Мой файл json выглядит примерно так:
[
"user": "danielrvt",
"date": "11/10/1988",
"email": "myemail@domain.com",
...
]
Вот решение, основанное на мой ответ на аналогичный вопрос о переполнении стека.
#!/bin/bash
json='
[
{
"user": "danielrvt",
"date": "11/10/1988",
"email": "myemail@domain.com"
},
{
"user": "anotheruser",
"date": "1/1/1970",
"email": "anotheruser@domain.com"
}
]
'
jq -M -r '
.[] | .user, .date, .email
' <<< "$json" | \
while read -r user; read -r date; read -r email; do
echo "$user $date $email"
done
Пример вывода
danielrvt 11/10/1988 myemail@domain.com
anotheruser 1/1/1970 anotheruser@domain.com
В вашем случае вы можете заменить использование <<< "$json"
с участием < credentials.json
и echo "$user $date $email"
с участием mycommand -u "$user" -d "$date" -e "$email"
по мере необходимости, но это должно прояснить основную идею.
вы можете использовать цикл for, например
#!/bin/bash
JSONARRAY=$(cat credentials.json | jq -r '.[] | .user, .date, .email' | mycommand -u {user} -d {date} -e {email} | grep -v "[\|]")
for line in $JSONARRAY; do
some command
done