如何从嵌套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
相关产品推荐
相关产品推荐

