Saya memiliki skrip bash yang digunakan set -o errexit
sehingga saat kesalahan seluruh skrip keluar pada titik kegagalan.
Skrip menjalankan curl
perintah yang terkadang gagal untuk mengambil file yang dimaksud - namun ketika ini terjadi skrip tidak keluar.
Saya telah menambahkan satu for
loop ke
- jeda selama beberapa detik kemudian coba lagi
curl
perintah - gunakan
false
di bagian bawah for loop untuk menentukan status keluar non-nol default - jika perintah curl berhasil - loop rusak dan status keluar dari perintah terakhir harus nol.
#! /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 .....
Masalahnya adalah ketika curl
perintah gagal, loop mengulangi perintah lima kali - jika semua upaya tidak berhasil maka for loop selesai dan script utama dilanjutkan - alih-alih memicu errexit
.
Bagaimana saya bisa membuat seluruh skrip keluar jika curl
pernyataan ini gagal?
true
sebelum pernyataan break menjadi eksplisit dan memastikan nilai keluar dari loop?