检查“make”的输出,如果失败则退出bash脚本

然而,我不仅仅是一场暴躁的比赛。 我已经写了一个bash脚本来执行我的cmake,make和c ++可执行文件。

#! /bin/bash cmake . make ./pcl_visualizer_demo <-- This is my executable 

这工作很好,除非我的代码编译失败,执行旧的可执行文件,并留下一团糟。 我希望把make的输出放到只有在make成功的时候运行可执行文件的if语句中。 我已经尝试了很多bash从其他post在这里stackoverflow的东西。 有些问题似乎是make的输出不是string,例如:

 OUTPUT = make echo $OUTPUT 

得到:

 [100%] Built target pcl_visualizer_demo 

但是不能与:

 if [`expr match "$OUTPUT" '[100%] -eq 5]; then ./pcl_visulizer_demo; fi 

更何况我认为这条线可能有不止一个错误。 我也试过:

 if [diff <(echo "$OUTPUT") <(echo '[100%] Built target pcl_visualizer_demo' -n]; then ./pcl_visulizer_demo; fi 

这又可能是我没有正确实施。 任何帮助

Solutions Collecting From Web of "检查“make”的输出,如果失败则退出bash脚本"

只需检查make的退出代码:

 cmake . || exit 1 make || exit 1 ./pcl_visualizer_demo 

你可以使用

 set -e 

在你的shell脚本的开始

 #!/bin/bash set -e cmake . make ./pcl_visualizer_demo 

从“帮助集”

 -e Exit immediately if a command exits with a non-zero status. 

默认情况下意味着:出现任何错误

你可能应该检查make的退出代码

 if [ $? -eq 0 ] then echo "Successfully made" else echo "Could not compile" >&2 fi 

并适当退出。 按照惯例,退出代码0表示成功。 如果你有多个可执行文件,并且如果有任何退出代码返回,你可以告诉bash用-e选项做这个事情,例如

  #!/usr/bin/bash -e 

只要确保可执行文件( makecmake )遵循这个约定。 有关退出代码的更多信息,请参阅此处 。

你可以尝试确定你以前的bash命令的'退出状态'是用'$?'。 通常,不成功的构建将以非零状态退出。 请仔细检查您的情况是否属实,方法是回显“$?”。

然后使用正常的if语句正确地继续。

$? 读取最后执行的命令的退出状态。 函数返回后,$? 给出了在函数中执行的最后一个命令的退出状态。 这是Bash赋予函数“返回值”的方式。 。 。 。
脚本终止后,一个$? 从命令行给出脚本的退出状态,即脚本中执行的最后一个命令,按惯例,成功时为0或错误范围为1 – 255的整数。

资料来源: http : //www.tldp.org/LDP/abs/html/exit-status.html