我收到一个命令,aws cloudformation
该命令以文本格式“DELETE_IN_PROGRESS”或“ROLLBACK_IN_PROGRESS”等返回堆栈状态:
aws cloudformation --region "$AWS_DEFAULT_REGION" describe-stacks --stack-name "$STACK_NAME" --query 'Stacks[*].StackStatus' --output text
如果进程正在进行,它仅返回堆栈状态,否则,它会抛出以下错误:
An error occurred (ValidationError) when calling the DescribeStacks operation: Stack with id `foobar` does not exist
所以,我的想法是隐藏这些异常的错误消息并计算文本输出,所以我这样做了:
AWS_DEFAULT_REGION='us-east-1'
STACK_NAME='blog-review-ci'
until test "$(aws cloudformation --region "$AWS_DEFAULT_REGION" describe-stacks --stack-name "$STACK_NAME" --query 'Stacks[*].StackStatus' --output text 2>/dev/null)" = 'DELETE_IN_PROGRESS'; do
echo "DELETE_IN_PROGRESS for $STACK_NAME, wait...";
sleep 3s;
done
不幸的是,这不断返回:
DELETE_IN_PROGRESS for foobar, wait...
这是不正确的,因为目前没有 DELETE_IN_PROGRESS 发生,所以不确定为什么它会通过。
我尝试查找有关 AWS 命令的更多信息,以了解错误情况下的输出是否为 stderr/stdout,但我不知道如何查找该信息。
我也尝试运行命令 | grep 'DELETE_IN_PROGRESS' 但这不起作用:
until aws cloudformation --region "$AWS_DEFAULT_REGION" describe-stacks --stack-name "$STACK_NAME" --query 'Stacks[*].StackStatus' --output text | grep 'DELETE_IN_PROGRESS'; do
echo "DELETE_IN_PROGRESS for $STACK_NAME, wait...";
sleep 3s;
done
这导致:
An error occurred (ValidationError) when calling the DescribeStacks operation: Stack with id blog-review-ci does not exist
DELETE_IN_PROGRESS for foobar, wait...
答案1
我认为您until
在明显需要的地方使用了while
。