如何在bash文件中进行try和catch?

如何在bash文件中进行try和catch?,bash,try-catch,Bash,Try Catch,我让shell文件(deploy.sh)执行以下命令: npm run build:prod docker-compose -f .docker/docker-compose.ecr.yml build my-app docker-compose -f .docker/docker-compose.ecr.yml push my-app aws ecs update-service --cluster ... 当其中一个命令出错时,我想停止bash的执行 哪个命令在she

我让shell文件(deploy.sh)执行以下命令:

  npm run build:prod

  docker-compose -f .docker/docker-compose.ecr.yml build my-app

  docker-compose -f .docker/docker-compose.ecr.yml push my-app

  aws ecs update-service --cluster ...
当其中一个命令出错时,我想停止bash的执行


哪个命令在shell中执行此操作?

您可以使用
set-e
在出现错误时退出。更好的是,您可以
设置-e
并使用陷阱函数

  #!/bin/bash
  set -e
  trap 'catch $? $LINENO' EXIT
  catch() {
   echo "catching!"
   if [ "$1" != "0" ]; then
     # error handling goes here
     echo "Error $1 occurred on $2"
   fi
  }

  npm run build:prod

  docker-compose -f .docker/docker-compose.ecr.yml build my-app

  docker-compose -f .docker/docker-compose.ecr.yml push my-app

  aws ecs update-service --cluster ...

来源:

您可以使用
set-e
在出现错误时退出。更好的是,您可以
设置-e
并使用陷阱函数

  #!/bin/bash
  set -e
  trap 'catch $? $LINENO' EXIT
  catch() {
   echo "catching!"
   if [ "$1" != "0" ]; then
     # error handling goes here
     echo "Error $1 occurred on $2"
   fi
  }

  npm run build:prod

  docker-compose -f .docker/docker-compose.ecr.yml build my-app

  docker-compose -f .docker/docker-compose.ecr.yml push my-app

  aws ecs update-service --cluster ...

来源:

在谷歌上进行了快速搜索,但似乎没有。如果。。。else块请参见以下链接:


希望这有帮助

在谷歌上进行了快速搜索,但似乎没有。如果。。。else块请参见以下链接:


希望这有助于

如果您想测试命令的成功或失败,可以依赖其退出代码。知道每个命令在成功时将返回一个
0
,或者在失败时返回任何其他数字,您可以选择如何处理每个命令的错误

||处理者
npm运行构建:prod | |退出1
如果条件
如果docker compose-f.docker/docker-compose.ecr.yml构建我的应用程序;然后
printf“成功\n”
其他的
printf“失败\n”
出口1
fi
美元?变量
docker-compose-f.docker/docker-compose.ecr.yml推送我的应用程序
如果[$?-gt 0];然后
printf“失败\n”
出口1
fi
陷阱
err_报告(){
回显“第$1行出错”
}
陷阱“err_报告$LINENO”错误
aws ecs更新服务--群集。。。
set-e
要全局“出错时退出”,则
set-e
将执行此操作。它不会给您提供太多信息,但会完成任务。

如果您想测试命令的成功或失败,可以依赖其退出代码。知道每个命令在成功时将返回一个
0
,或者在失败时返回任何其他数字,您可以选择如何处理每个命令的错误

||处理者
npm运行构建:prod | |退出1
如果条件
如果docker compose-f.docker/docker-compose.ecr.yml构建我的应用程序;然后
printf“成功\n”
其他的
printf“失败\n”
出口1
fi
美元?变量
docker-compose-f.docker/docker-compose.ecr.yml推送我的应用程序
如果[$?-gt 0];然后
printf“失败\n”
出口1
fi
陷阱
err_报告(){
回显“第$1行出错”
}
陷阱“err_报告$LINENO”错误
aws ecs更新服务--群集。。。
set-e
要全局“出错时退出”,则
set-e
将执行此操作。它不会给你提供太多信息,但会完成工作。

这能回答你的问题吗?这回答了你的问题吗?