[英]Check the output of “make” and exit bash script if it fails
但是,我不只是bash的一分子。 我已經編寫了一個bash腳本,它將執行我的cmake,make和c ++可執行文件。
#! /bin/bash
cmake .
make
./pcl_visualizer_demo <-- This is my executable
這很好用,除非當我的代碼無法編譯時,它執行舊的可執行文件並使我一團糟。 我希望將make的輸出放到僅在make成功時才運行可執行文件的if語句中。 我在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
再次可能是我沒有正確執行它。 任何幫助
只需檢查make的退出代碼:
cmake . || exit 1
make || exit 1
./pcl_visualizer_demo
你可以用
set -e
在Shell腳本的開頭
#!/bin/bash
set -e
cmake .
make
./pcl_visualizer_demo
來自“幫助集”
-e Exit immediately if a command exits with a non-zero status.
默認情況下表示:任何錯誤
您可能應該檢查make的退出代碼,例如
if [ $? -eq 0 ]
then
echo "Successfully made"
else
echo "Could not compile" >&2
fi
然后適當退出。 按照慣例,退出代碼0表示成功。 如果您有多個可執行文件,並且希望在有任何可執行文件返回非零退出代碼的情況下進行紓困,則可以使用-e
選項讓bash做到這一點,例如
#!/usr/bin/bash -e
只需確保可執行文件( make
和cmake
)遵循此約定即可。 有關退出代碼的更多信息,請參見此處 。
您可以嘗試確定以前的bash命令的“退出狀態”使用的是“ $?”。 通常,未成功的構建將以非零狀態退出。 通過回顯'$?'仔細檢查您的情況是否如此。
然后,使用常規的if語句正確進行。
$? 讀取最后執行的命令的退出狀態。 函數返回后,$? 給出函數中最后執行的命令的退出狀態。 這是Bash為函數賦予“返回值”的方式。 。 。 。
腳本終止后,$? 從命令行中給出腳本的退出狀態,即腳本中執行的最后一條命令,按照慣例,成功時為0,錯誤時為1到255的整數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.