Alt kodlardan herhangi biri! = 0 ile sona erdiğinde çıkış kodunu! = 0 bitirmek ve döndürmek için bu komut dosyasından çıkan birkaç alt işlem için bir bash komut dosyasında nasıl beklenir?
Basit komut dosyası:
#!/bin/bash
for i in `seq 0 9`; do
doCalculations $i &
done
wait
Yukarıdaki komut dosyası, ortaya çıkan 10 alt işlemin tümünü bekleyecek, ancak her zaman 0 çıkış durumunu verecektir (bkz. help wait
). Bu komut dosyasını, ortaya çıkan alt işlemlerin çıkış durumlarını keşfedecek ve alt işlemlerden herhangi biri! = 0 ile sona erdiğinde çıkış kodu 1'i döndürecek şekilde nasıl değiştirebilirim?
Bunun için alt süreçlerin PID'lerini toplamaktan, sırayla beklemekten ve çıkış durumlarını toplamaktan daha iyi bir çözüm var mı?
wait -n
küçük bir sorunu var: kalan alt iş yoksa (aka yarış durumu), başarısız bir alt işlemden ayırt edilemeyen sıfırdan farklı bir çıkış durumu (başarısız) döndürür.
wait -n
, sadece ilk / sonraki komut tamamlandığında dönmek için modern bash'de kullanılabilir.