然而,我不仅仅是打击,而是一个不仅仅是胆怯的人.我写了一个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)
默认情况下表示:任何错误
您可能应该检查 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)
只需确保可执行文件(make和cmake)遵循此约定即可。有关退出代码的更多信息,请参阅此处。