繁体   English   中英

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

[英]Check the output of “make” and exit bash script if it fails

但是,我不只是bash的一分子。 我已经编写了一个bash脚本,它将执行我的cmake,make和c ++可执行文件。

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

这很好用,除非当我的代码无法编译时,它执行旧的可执行文件并使我一团糟。 我希望将make的输出放到仅在make成功时才运行可执行文件的if语句中。 我在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

再次可能是我没有正确执行它。 任何帮助

只需检查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表示成功。 如果您有多个可执行文件,并且希望在有任何可执行文件返回非零退出代码的情况下进行纾困,则可以使用-e选项让bash做到这一点,例如

  #!/usr/bin/bash -e

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

您可以尝试确定以前的bash命令的“退出状态”使用的是“ $?”。 通常,未成功的构建将以非零状态退出。 通过回显'$?'仔细检查您的情况是否如此。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM