You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从嵌套shell脚本抛出错误并终止父shell脚本执行

解决方案

你当前的子脚本a.sh已经在检测到错误时返回了非0的退出码(exit 1),只需要在父脚本b.sh中捕获这个非0退出码并终止执行即可,常用有两种实现方案:


方案1:全局开启错误自动退出(推荐用于构建类脚本)

在b.sh开头添加set -e参数,该参数的作用是:只要脚本中任意命令返回非0退出码,脚本就立即终止执行,不需要手动逐个判断命令结果。
修改后b.sh代码如下:

#!/bin/bash
set -e

sh ./a.sh

rm -rf ios/ios-sdk/out/Frameworks
xcodebuild clean \
    -workspace ios/dyteClientMobile.xcworkspace \
    -scheme DyteSdk

方案2:仅判断a.sh的执行结果,不影响其他命令容错

如果你只需要a.sh失败时停止脚本,允许后续其他命令报错后继续执行,可以单独判断a.sh的退出码:

#!/bin/bash

# 写法1:显式判断退出码
sh ./a.sh
if [ $? -ne 0 ]; then
  exit 1
fi

# 写法2:简化为一行
# sh ./a.sh || exit 1

rm -rf ios/ios-sdk/out/Frameworks
xcodebuild clean \
    -workspace ios/dyteClientMobile.xcworkspace \
    -scheme DyteSdk

补充说明

不推荐使用source ./a.sh的方式执行子脚本:这种方式会让a.sh在父脚本的当前shell进程中执行,虽然a.sh的exit会直接终止父脚本,但会把a.sh中定义的所有变量、函数都污染父脚本的运行环境,除非有变量共享需求,否则不要使用该方式。

内容的提问来源于stack exchange,提问作者Alwaysblue

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 01:12:02