Посмотрел много постов на похожую тему, но я делаю что-то не так, так как постоянно получаю "jq: error: Could not open file" или "Invalid numeric literal".Я пытаюсь передать массив JSON в виде строкового значения через jq в цикл while и прочитать элементы массива JSON в цикле.Базовый скрипт bash работает с <<< $ {PRESET_ARR}), но не работает при вызове из приложения nodejs.</p>
Попытка вызвать этот скрипт bash из приложения nodejs.Я могу заставить работать только пакетный скрипт с <<< $ {PRESET_ARR}) Но вызов пакетного скрипта из nodejs вызывает «ошибку разбора: неверный числовой литерал в строке 1». </p>
Изменено для использования <<<echo "$ {PRESET_ARR}") и вызов из nodejs вызывает "jq: error: не удалось открыть файл" </p>
Мой сценарий bash:
#!/bin/bash
PRESET_ARR=$1
echo "PRESET_ARR=${PRESET_ARR}"
#PRESET_ARR='[{"resolution":"2160*2160","bitrate":60M,"framerate":60},{"resolution":"1350*1350","bitrate":"30M","framerate":60}]'
#./batch.sh '[{"resolution":"2160*2160","bitrate":"60M","framerate":60},{"resolution":"1350*1350","bitrate":"30M","framerate":60}]'
#echo "${PRESET_ARR}" | jq -r '.[] | (.resolution, .bitrate, .framerate)' |
while IFS= read resolution &&
IFS= read bitrate &&
IFS= read framerate;
#for row in $(echo "${PRESET_ARR}" | jq -r '.[] | (.resolution, .bitrate, .framerate)');
do
echo "resolution=$resolution"
echo "bitrate=$bitrate"
echo "framerate=$framerate"
done < <(jq -r '.[] | (.resolution, .bitrate, .framerate)' <<< echo "${PRESET_ARR}")
#done < <(jq -r '.[] | (".resolution", ".bitrate", ".framerate")' <<< ${PRESET_ARR})
TIA