Я разбираю документы политики 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> /dev/null в конец оператора if.
Спасибо! Помещение 2> /dev/null в конец команды jq работает.





I'm using an 'if' statement so that the right jq query gets used based on the aws policy that we're reading.
Но jq сообщает вам, что ваш запрос jq не всегда действителен. Таким образом, одним из вариантов было бы сделать ваш jq-запрос более надежным, например. с помощью постфикса ? (например, .Effect?) или проверки типа ввода и т. д.
Я не перенаправлял стандартную ошибку jq, только стандартную ошибку aws. Помещение 2> /dev/null в конец команды jq работает.
Вы не перенаправили стандартную ошибку
jq, только стандартную ошибкуaws.