Использование yq in для l oop bash - PullRequest
0 голосов
/ 14 июля 2020

У меня есть массив yaml, как показано ниже,

identitymappings:
- arn: "arn:aws:iam::12345567:role/AdmRole"
  group: "system:masters"
  user: "user1"
- arn: "arn:aws:iam::12345567:role/TestRole"
  group: "system:masters"
  user: "user2"

Я пытаюсь проанализировать этот yaml в сценарии bash, используя для l oop и yq.

 for identityMapping in $(yq read test.yaml "identitymappings[*]"); do
      roleArn=$identityMapping["arn"]
      group=$identityMapping.group
      user=$identityMapping.user
done

Но я не получаю ожидаемых результатов, например, не могу получить значения roleArn, group, user. Пожалуйста, дайте мне знать, как это исправить.

Ответы [ 2 ]

1 голос
/ 14 июля 2020

Самый простой способ чтения из jq или yq в bash - использовать BashFAQ # 1 while read l oop для обработки строчно-ориентированных данных; ниже мы используем @tsv для генерации строчно-ориентированного вывода:

while IFS=$'\t' read -r roleArn group user _; do
  echo "Role:  $roleArn"
  echo "Group: $group"
  echo "User:  $user"
done < <(yq -j read test.yaml \
         | jq -r '.identitymappings[] | [.arn, .group, .user] | @tsv')

Обратите внимание, что если вы использовали Python yq, а не , Go one , вы можете удалить yq -j read и просто использовать yq -r '...' вместо jq -r '...'.

0 голосов
/ 14 июля 2020

разобрался ..

for identityMapping in $(yq read test.yaml -j "identitymappings[*]"); do
      echo $identityMapping
      roleArn= echo $identityMapping | jq -r '.arn'
      echo $roleArn
      group= echo $identityMapping | jq -r '.group'
      echo $group
      user= echo $identityMapping | jq -r '.user'
      echo $user
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...