Saya memiliki skenario di bawah ini seperti:
if [file exists]; then
exit
elif
recheck if file exist (max 10 times)
if found exit else recheck again as per counter
fi
bash
shell-script
Rocky86
sumber
sumber
Jawaban:
Ada banyak cara untuk melakukan loop ini.
Dengan
ksh93
sintaks (juga didukung olehzsh
danbash
):Untuk setiap shell mirip POSIX:
Kedua loop tidur 10 detik di setiap iterasi sebelum menguji keberadaan file lagi.
Setelah loop selesai, Anda harus menguji keberadaan file terakhir kali untuk mengetahui apakah loop keluar karena berjalan 10 kali atau karena file muncul.
Jika Anda mau, dan jika Anda memiliki akses ke alat yang tidak sah, Anda dapat mengganti
sleep 10
panggilan denganIni akan menunggu acara pembuatan file terjadi di direktori saat ini, tetapi akan habis setelah 10 detik. Dengan cara ini loop Anda akan keluar segera setelah nama file yang diberikan muncul (jika muncul).
Kode lengkap, dengan
inotifywait
(ganti dengansleep 10
jika Anda tidak menginginkannya), mungkin terlihat sepertisumber
inotifywait
sebagai pengganti drop-insleep
.Jika jumlah bukan variabel, Anda dapat menggunakan ekspansi brace:
Jika jumlah adalah variabel, Anda dapat menggunakan
seq
perintah:sumber
$(seq $count)
meskipun
test -e file && exit
lebih fleksibelsumber
exists1
atau seperti itu, masih mencetak banyak kesalahan jika / ketika file yang cocok tidak ditemukan. (Juga kesalahan jika ada beberapa pertandingan.) Setiap shell lain yang saya uji tampaknya memberikan kesalahan dalam hal apapun ...done 2<>/dev/null
. apakahbash
itu dituliskan? Saya pikir itu hanya berhasil dalam-i
konteks nteraktif. masih,exists?
sebanyak nama pengisi sebagaifile
. tapi ya, saya benci mengutip pengalihan - jika sekrup begitu banyak.test -e
.