[问题修复][yocoto][rubikpi_build.sh] Linux Shell 返回值之 PIPESTATUS

  • 问题描述:
    在 yocto 工程中,使用 rubikpi_buil.sh -a 命令时,脚本中关键 bitbake 命令出错时脚本并未停止运行,导致有些情况无法使用 ./rubikpi_build.sh --zip_flat_build 命令打包镜像。

  • 问题分析:
    BASH SHELL中,通常使用 $? 来获取上一条命令的返回码,对于管道中的命令,使用 $? 只能获取管道中最后一条命令的返回码。
    rubikpi_build.sh 中出问题的函数如下,即使 bitbake 命令出错了,assert 函数也不会检查出来。

    assert() {
    	if [ $? -ne 0 ];then
    		exit 1;
    	fi
    }
    
    echo "bitbake qcom-multimedia-image" 2>&1 | tee -a $log_file
    bitbake qcom-multimedia-image 2>&1 | tee -a $log_file
    assert
    
    echo "bitbake qcom-qim-product-sdk" 2>&1 | tee -a $log_file
    bitbake qcom-qim-product-sdk
    assert
    }
    
    
  • 解决方法: