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

Che*_*ita 7 linux bash shell

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

#! /bin/bash
cmake .
make
./pcl_visualizer_demo   <-- This is my executable
Run Code Online (Sandbox Code Playgroud)

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

OUTPUT = make
echo $OUTPUT
Run Code Online (Sandbox Code Playgroud)

得到:

[100%] Built target pcl_visualizer_demo
Run Code Online (Sandbox Code Playgroud)

但未能合作:

if [`expr match "$OUTPUT" '[100%] -eq 5]; then ./pcl_visulizer_demo; fi
Run Code Online (Sandbox Code Playgroud)

更不用说我认为这条线可能不止一件事.我也尝试过:

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

再次可能是我没有正确实施它.任何帮助

cho*_*oba 21

只需检查make的退出代码:

cmake . || exit 1
make || exit 1
./pcl_visualizer_demo 
Run Code Online (Sandbox Code Playgroud)


小智 6

你可以用

set -e
Run Code Online (Sandbox Code Playgroud)

在Shell脚本的开头

#!/bin/bash
set -e
cmake .
make
./pcl_visualizer_demo
Run Code Online (Sandbox Code Playgroud)

来自“帮助集”

-e  Exit immediately if a command exits with a non-zero status.
Run Code Online (Sandbox Code Playgroud)

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


Bri*_*new 5

您可能应该检查 make 的退出代码,例如

if [ $? -eq 0 ]
then
  echo "Successfully made"
else
  echo "Could not compile" >&2
fi
Run Code Online (Sandbox Code Playgroud)

并适当退出。按照惯例,退出代码 0 表示成功。如果您有多个可执行文件,并且您希望在任何一个返回非零退出代码时退出,您可以使用以下选项告诉 bash 执行此操作-e

  #!/usr/bin/bash -e
Run Code Online (Sandbox Code Playgroud)

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