我已阅读this,建议进行以下编译检查:
installCheck () {
if g++ check_opencv.cpp -o check_opencv; then
return 1
else
rm check_opencv
return 0
fi
}
if installCheck $0; then
echo "OpenCV already installed, skipping"
exit 0
fi
但是,运行此脚本会给出:
check_opencv.cpp:2:33: fatal error: opencv2/core/core.hpp: No such file or directory
compilation terminated.
rm: check_opencv: No such file or directory
OpenCV already installed, skipping
这是错误的。然后我改为:
installCheck () {
g++ check_opencv.cpp -o check_opencv
if [[ $? -ne 0 ]]; then
并且工作正常:
check_opencv.cpp:2:33: fatal error: opencv2/core/core.hpp: No such file or directory
compilation terminated.
Cloning into 'opencv-2.4.9'...
为什么?由于[[
或g++
的某些行为?
this中的某个人说"可悲的是,事实证明,返回0天气不会失败。"当g++
失败时,它是否总是会返回非零值?也许我会错过一些明显的东西,所以请为我澄清一下。非常感谢你!
更新:事实证明我错误地理解了bash。返回值0在bash中的计算结果为true,这与我之前的想法相矛盾。 This有帮助。
答案 0 :(得分:3)
if g++ check_opencv.cpp -o check_opencv; then
return 1
如果编译成功,将返回失败(1)。显然,如果编译失败,您希望返回失败,这将是:
if ! g++ check_opencv.cpp -o check_opencv; then
return 1
或者您可以按正确的顺序放置真假分支:
installCheck () {
if g++ check_opencv.cpp -o check_opencv; then
rm check_opencv
return 0
else
return 1
fi
}
我没有在链接问题中看到它建议你提出的代码。
我认为如果编译成功,你的目的是避免污染文件系统,因为编译本身是唯一需要的测试。您也可以通过以下方式实现这一目标:
installCheck () {
g++ check_opencv.cpp -o check_opencv
local rv=$?
rm -f check_opencv
return rv
}
答案 1 :(得分:0)
if cmd; ...
为“true”,即cmd的退出状态为0 - 它在逻辑上等同于cmd; if [[ $? -eq 0 ]]; ...