Не удалось создать массив bash для проверки значений времени безотказной работы из выходных данных json команды aws cli

Используя Миллера (https://github.com/johnkerl/miller), вы можете запустить

mlr --csv join  -u --ul --ur -j ID -f input_01.csv  \
then unsparsify \
then put -S 'for (k in $*) { if ($[k] =~ "^$") { $[k]="NM" }}' \
input_02.csv

и получить

ID,MD,L7,L8,L9,L10,L1,L2,L3,L4
13,OB,PP,AA,AA,AA,NM,NM,NM,NM
15,OB,PP,PP,PP,AA,PP,PP,PP,AA
12,OB,NM,NM,NM,NM,AA,PP,AA,AA

1
21.12.2020, 17:42
1 ответ

Вы никогда не входите в петлю:

$ completeLoop=false
$ while [ ! $completeLoop ]; do date; done; echo complete
complete

Команда [, если задан один аргумент (, за исключением !и замыкающего ]), вернет успех, если аргумент не пуст. И «истина», и «ложь» не пусты.

Чтобы воздействовать на фактический логический результат команд trueи false, опустите[:

completeLoop=false
count=0
#....vvvvvvvvvvvvvvv
while ! "$completeLoop"; do
  echo in loop
  (( ++count == 5 )) && completeLoop=true
done
echo complete
in loop
in loop
in loop
in loop
in loop
complete

Вы хотите

readarray -t upTimeArray < <(
   aws ssm list-command-invocations --command-id "$ssmID" --details --output json |
     sed $'s/\r$//' |
     jq -r '.CommandInvocations[].CommandPlugins[].Output'
)

Использование sed для удаления завершающего возврата каретки (перевод строки обрабатывается автоматически )и jq -rдля вывода «сырого» значения без кавычек.

Я перенаправляюсь из подстановки процесса вместо здесь -строки. Те же результаты.

Можно добавить дополнительные пробелы внутри $(...)для удобочитаемости

0
18.03.2021, 22:48

Теги

Похожие вопросы