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有幫助。
是什麼?「如果[之間的區別! $(g ++ check_opencv.cpp -o check_opencv)]];然後「和」if!g ++ check_opencv.cpp -o check_opencv; then「?當opencv已經安裝時,後者不起作用。謝謝! –
@雲生白:他們是完全不同的東西。第一個不是很有意義:如果'g ++'命令不會將任何內容輸出到'stdout'(這是正常的,因爲'g ++'通常會將錯誤輸出到'stderr')。第二個測試'g ++'是否返回失敗碼。你需要更清楚地說明「後者不起作用」的含義。 – rici
謝謝!我對bash編程完全陌生,我會學習它。 –