如果命令有任何錯誤,我想停止我的 BASH。
make clean || ( echo "ERROR!!" && echo "ERROR!!" >> log_file && exit 1 )
但似乎我的 BASH 仍在繼續。如何放入exit 1單行運算子
我對 BASH 很陌生,感謝任何幫助!
uj5u.com熱心網友回復:
exit 1退出由創建的子shell (),而不是原始shell。用于{}將命令組保持在同一個 shell 中。
不要&&在命令之間使用,除非您想在其中一個失敗時立即停止。用于;分隔同一行上的命令。
make clean || { echo "ERROR!!" ; echo "ERROR!!" >> log_file ; exit 1 ;}
或者只是if用來使它更容易理解。
if ! make clean
then
echo "ERROR!!"
echo "ERROR!!" >> log_file
exit
fi
uj5u.com熱心網友回復:
您在Barmar 的回答中有直接的解決方案。如果您想以類似的方式檢查多個命令,另一種方法是定義一個可以重用的函式:
die() {
echo "ERROR: $@"
echo "ERROR: $@" >> log_file
exit 1
}
make clean || die "I left it unclean"
make something || die "something went wrong"
或者,如果您希望腳本在出現問題的第一個跡象時結束,您可以使用set -e
set -e
make clean # stops here unless successful
make something # or here if this line fails etc.
您可能還想記錄錯誤訊息,因此您可以trap在ERR. errfunc將在退出腳本之前呼叫此處,并記錄失敗的行號:
errfunc() {
echo "ERROR on line $1"
echo "ERROR on line $1" >> log_file
}
trap 'errfunc $LINENO' ERR
set -e
make clean
make something
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/455966.html
上一篇:有沒有比使用while回圈更有效的方法來創建每行重復文本的檔案?(100萬行 )
下一篇:未找到JVM啟動標志
