我正在解析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'语句,以便根据我们正在阅读的aws策略使用正确的jq查询。
我会收到此错误:
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语句获取不打印到屏幕的错误?
答案 0 :(得分:2)
我正在使用'if'语句,以便根据我们正在阅读的aws策略使用正确的jq查询。
但是jq告诉您jq查询并不总是有效的。因此,一种选择是使您的jq查询更可靠,例如通过使用后缀?
(例如.Effect?
)或测试输入的类型,等等。
答案 1 :(得分:0)
我没有重定向jq的标准错误,只有aws的标准错误。将2> /dev/null
放在jq命令的末尾即可。