ฉันมีสคริปต์ทุบตีซึ่งใช้set -o errexit
เพื่อให้เกิดข้อผิดพลาดสคริปต์ทั้งหมดออกจากที่จุดของความล้มเหลว
สคริปต์รันcurl
คำสั่งซึ่งบางครั้งล้มเหลวในการดึงไฟล์ที่ต้องการ - อย่างไรก็ตามเมื่อเกิดเหตุการณ์นี้สคริปต์จะไม่เกิดข้อผิดพลาดในการออก
ฉันได้เพิ่มการfor
วนซ้ำไป
- หยุดชั่วครู่หนึ่งแล้วลอง
curl
คำสั่งอีกครั้ง - ใช้
false
ที่ด้านล่างของ for for loop เพื่อกำหนดสถานะการออกไม่เป็นศูนย์เริ่มต้น - หากคำสั่ง curl สำเร็จ - การแบ่งลูปและสถานะการออกของคำสั่งสุดท้ายควรเป็นศูนย์
#! /bin/bash
set -o errexit
# ...
for (( i=1; i<5; i++ ))
do
echo "attempt number: "$i
curl -LSso ~/.vim/autoload/pathogen.vim https://tpo.pe/pathogen.vim
if [ -f ~/.vim/autoload/pathogen.vim ]
then
echo "file has been retrieved by curl, so breaking now..."
break;
fi
echo "curl'ed file doesn't yet exist, so now will wait 5 seconds and retry"
sleep 5
# exit with non-zero status so main script will errexit
false
done
# rest of script .....
ปัญหาคือเมื่อcurl
คำสั่งล้มเหลวห่วง retries คำสั่งห้าครั้ง - ถ้าความพยายามทั้งหมดไม่ประสบความสำเร็จในการเสร็จสิ้นห่วงและสคริปต์หลักดำเนินการต่อ - errexit
แทนวิกฤติ
ฉันจะทำให้สคริปต์ทั้งหมดจบการทำงานได้อย่างไรหากcurl
คำสั่งนี้ล้มเหลว
true
คำสั่ง break ให้ชัดเจนและทำให้แน่ใจว่าค่าการออกของลูปนั้นดีหรือไม่?