Как правильно преобразовать вывод AWS CLI в массив bash

Вопрос или проблема

ПЕРЕД ЗАКРЫТИЕМ ЭТОГО ВОПРОСА – ПОЖАЛУЙСТА, ПРОЧИТАЙТЕ ЕГО!

Эти решения не являются ответами на этот вопрос.

Это пример скрипта AWS CLI:

taskDefs=$(aws ecs list-task-definitions --status="INACTIVE" --query="taskDefinitionArns")
echo $taskDefs
# вывод: ["arn:1", "arn:2", "arn:3"]

Это выдает точно то же самое:

echo $taskDefs[0]
# вывод: ["arn:1", "arn:2", "arn:3"]

Я хочу пройти по результатам, но, похоже, он просто выводит весь массив.

for value in "${taskDefs[@]}"
do
echo "value=$value" 
done
# вывод: value=["arn:1", "arn:2", "arn:3"]

Я хочу, чтобы выводилось:

value="arn:1"

Ответ или решение

Чтобы корректно преобразовать вывод AWS CLI в массив Bash, мы можем воспользоваться утилитой jq, которая служит для обработки JSON. Ниже приведены шаги и пример, как это сделать.

  1. Установите jq, если у вас его ещё нет. Вы можете сделать это, используя пакетный менеджер вашей системы. Например, для Ubuntu используйте команду:

    sudo apt-get install jq
  2. Используйте AWS CLI для получения списка ваших задач, а затем передайте этот вывод через jq, чтобы преобразовать его в массив.

Вот пример, как можно реализовать это в скрипте Bash:

# Получаем список определений задач и преобразуем его в массив
taskDefs=$(aws ecs list-task-definitions --status="INACTIVE" --query="taskDefinitionArns" --output json)

# Преобразуем JSON-массив в Bash-массив с помощью jq
taskDefsArray=($(echo "$taskDefs" | jq -r '.[]'))

# Итерация по элементам массива
for value in "${taskDefsArray[@]}"; do
    echo "value=$value"
done

Объяснение кода:

  • aws ecs list-task-definitions --status="INACTIVE" --query="taskDefinitionArns" --output json получает список неактивных определений задач и выводит его в формате JSON.

  • jq -r '.[]' разбирает JSON и извлекает элементы массива, выводя их в обычном текстовом формате. Флаг -r используется для удаления кавычек, чтобы элементы могли быть правильно помещены в массив Bash.

  • taskDefsArray=($(...)) — это синтаксис для инициализации массива в Bash. Вывод, который приходит от jq, будет разбиваться на отдельные элементы.

  • В цикл for мы проходимся по каждому элементу массива и выводим его значение.

Теперь с помощью этого скрипта вы сможете корректно получить отдельные значения из вывода AWS CLI и использовать их в вашем Bash-скрипте.

Оцените материал
Добавить комментарий

Капча загружается...