然而,我不仅仅是为了抨击我的胆怯;我写了一个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
同样可能是我没有正确实施它。任何帮助
答案 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
确保可执行文件(make
和cmake
)遵循此约定。有关退出代码的详细信息,请参阅here。
答案 3 :(得分:0)
您可以尝试确定退出状态&#39;您以前的bash命令使用了&#39; $?&#39;。通常,未成功的构建将以非零状态退出。通过回复&#39; $?&#39;
,仔细检查这是否属实然后使用正常的if语句正确进行。
$?读取最后执行的命令的退出状态。之后 函数返回,$?给出最后一个命令的退出状态 在函数中执行。这是Bash提供函数的方法 &#34;返回值。&#34; 。 。 。
脚本终止后,$?从命令行给出出口 脚本的状态,即在执行的最后一个命令 脚本,按惯例,成功时为0,或者是整数 误差范围1 - 255。