Подавить ошибки в команде readarray в Bash - PullRequest
0 голосов
/ 10 ноября 2018

Я анализирую документы политики AWS и пытаюсь отправить ошибки в этой команде в / dev / null, чтобы пользователь их не видел.

Это мой код:

readarray -t aws_policy_effects < \
    <( if aws iam get-policy-version --policy-arn "$aws_policy_arn" \
              --version-id "$aws_policy_version_id"  --profile="$aws_key" 2> /dev/null | \
          jq -r '.PolicyVersion.Document.Statement[].Effect'
       then
           true
       else
           aws iam get-policy-version --policy-arn "$aws_policy_arn" \
                   --version-id "$aws_policy_version_id" --profile="$aws_key" | \
               jq -r '.PolicyVersion.Document.Statement.Effect'
          fi)

Я использую оператор 'if', чтобы использовать правильный запрос jq на основе политики aws, которую мы читаем.

Я получу эту ошибку:

jq: error (at <stdin>:22): Cannot index string with string "Effect"

Поскольку эта команда всегда выполняется в качестве первого условия условия if (если в списке нет инструкции документа политики AWS):

++ jq -r '.PolicyVersion.Document.Statement[].Effect'
++ aws iam get-policy-version --policy-arn arn:aws:iam::123456789101:policy/IP_RESTRICTION --version-id v11 --profile=company-lab

Почему ошибка не скрывается, отправляя ее в / dev / null? Как я могу получить сообщение об ошибке, чтобы оно не выводилось на экран с помощью этого оператора if?

Ответы [ 2 ]

0 голосов
/ 13 ноября 2018

Я не перенаправлял стандартную ошибку jq, только стандартную ошибку aws. Помещение 2> /dev/null в конец команды jq работает.

0 голосов
/ 10 ноября 2018

Я использую оператор if, чтобы использовать правильный jq-запрос на основе политики aws, которую мы читаем.

Но jq говорит вам, что ваш запрос jq не всегда действителен. Таким образом, одним из вариантов будет сделать ваш запрос JQ более надежным, например, используя постфикс ? (например, .Effect?) или проверяя тип ввода и т. д.

...