[英]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
只需确保可执行文件( make
和cmake
)遵循此约定即可。 有关退出代码的更多信息,请参见此处 。
您可以尝试确定以前的bash命令的“退出状态”使用的是“ $?”。 通常,未成功的构建将以非零状态退出。 通过回显'$?'仔细检查您的情况是否如此。
然后,使用常规的if语句正确进行。
$? 读取最后执行的命令的退出状态。 函数返回后,$? 给出函数中最后执行的命令的退出状态。 这是Bash为函数赋予“返回值”的方式。 。 。 。
脚本终止后,$? 从命令行中给出脚本的退出状态,即脚本中执行的最后一条命令,按照惯例,成功时为0,错误时为1到255的整数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.