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

时间:2015-06-18 15:33:38

标签: linux bash shell

然而,我不仅仅是为了抨击我的胆怯;我写了一个bash脚本,它将执行我的cmake,make和c ++可执行文件。

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

这很好用,除非我的代码无法编译它执行旧的可执行文件并让我一团糟。我希望将make的输出放入if语句中,该语句仅在make成功时运行可执行文件。我在stackoverflow上尝试了很多其他帖子中的bash。一些问题似乎是make的输出不是字符串,例如:

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

同样可能是我没有正确实施它。任何帮助

4 个答案:

答案 0 :(得分:19)

只需检查make的退出代码:

from rest_framework import pagination

答案 1 :(得分:4)

您可以使用

set -e

在shell脚本的开头

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

来自'帮助设置'

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

默认情况下,表示:任何错误

答案 2 :(得分:3)

你应该检查一下make的退出代码。

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

并适当退出。按照惯例,退出代码为0表示成功。如果你有多个可执行文件并且你想要挽救,如果有任何返回非零退出代码,你可以告诉bash使用-e选项,例如。

  #!/usr/bin/bash -e

确保可执行文件(makecmake)遵循此约定。有关退出代码的详细信息,请参阅here

答案 3 :(得分:0)

您可以尝试确定退出状态&#39;您以前的bash命令使用了&#39; $?&#39;。通常,未成功的构建将以非零状态退出。通过回复&#39; $?&#39;

,仔细检查这是否属实

然后使用正常的if语句正确进行。

  

$?读取最后执行的命令的退出状态。之后   函数返回,$?给出最后一个命令的退出状态   在函数中执行。这是Bash提供函数的方法   &#34;返回值。&#34;   。 。 。
  脚本终止后,$?从命令行给出出口   脚本的状态,即在执行的最后一个命令   脚本,按惯例,成功时为0,或者是整数   误差范围1 - 255。

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