gcloud创建已存在pubsub topic时如何避免报错终止脚本执行?
解决方案
你提到的--no-user-output-enabled参数仅用于关闭命令的标准输出,不会抑制错误抛出、也不会修改命令的退出状态码,因此无法解决你的问题。可选择以下两种方案处理:
方案1:直接跳过已存在资源的创建(最简单)
gcloud SDK 372.0.0及以上版本原生支持--if-not-exists参数,仅当目标topic不存在时才执行创建逻辑,存在时会静默跳过,不会抛出错误:
gcloud pubsub topics create some-topic --if-not-exists
如果你的SDK版本较低不支持该参数,也可以通过shell逻辑仅忽略「资源已存在」类错误,不中断脚本运行:
# 仅过滤资源已存在的错误,其他错误仍会正常抛出 gcloud pubsub topics create some-topic 2>&1 | grep -v "Resource already exists" # 不需要区分错误类型的话可以用更简单的写法,强制命令返回成功状态 # gcloud pubsub topics create some-topic || true
方案2:先校验Topic存在状态再执行创建(更可控)
如果需要自定义Topic存在时的处理逻辑,或者需要避免忽略其他类型的错误(比如权限不足、网络异常等),可以先调用gcloud命令校验Topic是否存在,再决定是否执行创建:
TOPIC_NAME="some-topic" # 校验目标Topic是否存在,不存在时返回值为空 EXIST_CHECK=$(gcloud pubsub topics describe ${TOPIC_NAME} --format="value(name)" 2>/dev/null) if [ -z "${EXIST_CHECK}" ];then gcloud pubsub topics create ${TOPIC_NAME} echo "Topic ${TOPIC_NAME} 创建完成" else echo "Topic ${TOPIC_NAME} 已存在,跳过创建步骤" fi
内容的提问来源于stack exchange,提问作者Rodrigo
相关产品推荐
相关产品推荐

