首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果出现错误,如何退出bash函数?

如果出现错误,如何退出bash函数?
EN

Stack Overflow用户
提问于 2016-11-05 02:48:39
回答 5查看 17.6K关注 0票数 37

我正在制作一个预提交脚本。它看起来是这样的:

代码语言:javascript
复制
function presubmit() {
  gradle test android
  gradle test ios
  gradle test server
  git push origin master
}

如果任何测试失败,我希望函数退出,这样它就不会将bug推到git上。多么?

EN

回答 5

Stack Overflow用户

发布于 2019-11-21 06:43:49

1.结合使用subshell ( .. ) ;为了更简洁,您可以这样做:

代码语言:javascript
复制
build() {( set -e        # Fail early
  build_cmd_step_1
  build_cmd_step_2
  build_cmd_step_3
  ...
)}

然后,函数将在第一次失败时失败,您可以截获退出状态:

代码语言:javascript
复制
build
exit_status=$?
if [ ${exit_status} -ne 0 ]; then
  echo "We have error - build failed!"
  exit "${exit_status}"
fi

2.或者, && \ 内部的链接也是好的(https://stackoverflow.com/a/51913013/1375784),尽管如果你有一个更大的函数,它可能会变得不好。

这两种方法都很好,这取决于您的用例(在某些情况下,使用子subshells可能会导致一些不想要的副作用)

票数 27
EN

Stack Overflow用户

发布于 2018-08-19 06:30:02

我这样做的方法是在函数中的每个命令后添加&& \ (除了最后一个命令)。

代码语言:javascript
复制
function presubmit() {
    gradle test android && \
    gradle test ios && \
    gradle test server && \
    git push origin master
}
票数 18
EN

Stack Overflow用户

发布于 2016-11-05 03:19:32

您可以这样做:

代码语言:javascript
复制
# declare a wrapper function for gradle
gradle() {
   command gradle "$@" || exit 1
}

presubmit() {
  gradle test android
  gradle test ios
  gradle test server
  git push origin master
}

declare -xf presubmit gradle

调用子subshell中的函数,如下所示:

代码语言:javascript
复制
( presubmit )
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40429865

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档