簡體   English   中英

檢查“ make”的輸出,如果失敗,則退出bash腳本

[英]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

只需確保可執行文件( makecmake )遵循此約定即可。 有關退出代碼的更多信息,請參見此處

您可以嘗試確定以前的bash命令的“退出狀態”使用的是“ $?”。 通常,未成功的構建將以非零狀態退出。 通過回顯'$?'仔細檢查您的情況是否如此。

然后,使用常規的if語句正確進行。

$? 讀取最后執行的命令的退出狀態。 函數返回后,$? 給出函數中最后執行的命令的退出狀態。 這是Bash為函數賦予“返回值”的方式。
腳本終止后,$? 從命令行中給出腳本的退出狀態,即腳本中執行的最后一條命令,按照慣例,成功時為0,錯誤時為1到255的整數。

資料來源: http : //www.tldp.org/LDP/abs/html/exit-status.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM