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

Bash脚本中判断make命令执行失败逻辑不生效的问题

CMake生成的Makefile执行失败时shell判断逻辑不生效的解决方案

问题根因

  • 原脚本仅判断make的退出码等于1时才进入失败分支,不符合make的退出码规则:任何非0的退出码都代表make执行失败,CMake生成的Makefile在编译错误、依赖缺失、权限不足等不同失败场景下,可能返回2、3等其他非0值,自然无法触发原判断逻辑。
  • 额外潜在问题:原脚本中$1未加引号,若传入的路径包含空格会导致命令执行异常。

修复方案

方案1:修改退出码判断逻辑(最小改动)

直接判断退出码是否不等于0即可覆盖所有失败场景:

make --directory="$1/build"
if [ $? -ne 0 ]; then
   echo "Bad build"
   exit 1
else
   echo "Good build"
fi

方案2:更简洁的写法(推荐)

直接把make命令放在if判断条件中,不需要显式读取$?,可读性更高:

if ! make --directory="$1/build"; then
   echo "Bad build"
   exit 1
else
   echo "Good build"
fi

额外最佳实践

如果你的脚本不需要在make失败后执行特殊的清理逻辑,可以在脚本开头加上set -eo pipefail,shell会自动在任意命令执行失败时终止脚本运行,无需手动编写退出码判断:

#!/bin/bash
set -eo pipefail

make --directory="$1/build"
echo "Good build"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 05:06:04