Bagaimana cara menunggu dalam skrip bash untuk beberapa subproses yang dihasilkan dari skrip tersebut untuk menyelesaikan dan mengembalikan kode keluar! = 0 ketika salah satu subproses berakhir dengan kode! = 0?
Skrip sederhana:
#!/bin/bash
for i in `seq 0 9`; do
doCalculations $i &
done
wait
Script di atas akan menunggu semua 10 subproses yang muncul, tetapi selalu memberikan status keluar 0 (lihat help wait
). Bagaimana saya bisa memodifikasi skrip ini sehingga akan menemukan status keluar dari subproses yang muncul dan mengembalikan kode keluar 1 ketika salah satu dari subproses berakhir dengan kode! = 0?
Apakah ada solusi yang lebih baik untuk itu daripada mengumpulkan PID dari subproses, menunggu mereka dalam urutan dan jumlah status keluar?
wait -n
memiliki satu masalah kecil: jika tidak ada pekerjaan anak yang tersisa (alias kondisi ras), ia mengembalikan status keluar yang tidak nol (gagal) yang dapat dibedakan dari proses anak yang gagal.
wait -n
, tersedia dalam bash modern untuk kembali hanya ketika perintah pertama / berikutnya selesai.