Я пытаюсь выполнить цикл, в котором выходные данные каждой команды Curl, возвращающей данные JSON, выделяются в переменную/массив. Я использую команду tee, чтобы получить желаемое значение плюс следующий токен для следующего фрагмента данных JSON. Когда я сохраняю данные в файл, все работает нормально, но вместо сохранения данных в файл я бы хотел сохранить их в массиве/переменной.
Это работает:
while [[ "$next_token" != "null" ]]
do
curl -u "$user:$password" "https://mylink.dot" \
| tee >(jq -r '.dataSummaries[] | .dataId' >> my_data_file.txt ) \
>(jq -r '.nextToken'>next_token_file.txt) > /dev/null
next_token=$(cat next_token_file.txt)
done
Я попробовал это:
while [[ "$next_token" != "null" ]]
do
index=$((index+1))
curl -u "$user:$password" "https://mylink.dot" | tee >(jq -r '.dataSummaries[] | .dataId' | read my_array[index] ) >(jq -r '.nextToken'>next_token_file.txt) > /dev/null
next_token=$(cat next_token_file.txt)
done
Когда я использую |read var, моя переменная пуста.
Как в этом случае я могу хранить данные json (и следующий токен) в переменной, а не в файле.





Второй jq должен прочитать из стандартного вывода tee, а затем записать в стандартный вывод. Весь этот конвейер затем помещается в другую замену процесса для read для чтения.
read next_token <( curl -u "$user:$password" "https://mylink.dot" |
tee >(jq -r '.dataSummaries[] | .dataId' >> my_data_file.txt ) |
jq -r '.nextToken')
Я планирую использовать этот механизм, чтобы получить оба значения как переменные.
read var1 var2 <<<$(curl -u "$user:$password" "https://mylink.dot" | tee >(jq -r '.dataSummaries[] | .dataId') >(jq -r '.nextToken') > /dev/null)