如何从命令输出创建可能引发异常的条件?

如何从命令输出创建可能引发异常的条件?

我收到一个命令,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

whileBash 之间和untilBash 中的区别

相关内容