Lingkaran luar yang Anda miliki pada dasarnya
for i in {1..10}; do
some_compound_command &
done
Ini akan memulai sepuluh contoh bersamaan some_compound_command
di latar belakang. Mereka akan dimulai secepat mungkin, tetapi tidak cukup "semuanya pada saat yang sama" (yaitu jika some_compound_command
membutuhkan waktu sangat sedikit, maka yang pertama mungkin selesai sebelum yang terakhir dimulai).
Fakta yang some_compound_command
terjadi sebagai sebuah loop tidak penting. Ini berarti bahwa kode yang Anda tunjukkan adalah benar bahwa iterasi dari j
-loop akan berjalan secara berurutan, tetapi semua instance dari loop dalam (satu per iterasi dari loop-luar i
) akan dimulai secara bersamaan.
Satu-satunya hal yang perlu diingat adalah bahwa setiap pekerjaan latar belakang akan berjalan dalam subkulit. Ini berarti bahwa perubahan yang dibuat ke lingkungan (mis. Modifikasi nilai-nilai variabel shell, perubahan direktori kerja saat ini cd
, dll.) Dalam satu contoh loop dalam tidak akan terlihat di luar pekerjaan latar belakang tertentu.
Apa yang mungkin ingin Anda tambahkan adalah wait
pernyataan setelah loop Anda, hanya untuk menunggu semua pekerjaan latar belakang benar-benar selesai, setidaknya sebelum skrip berakhir:
for i in {1..10}; do
for j in {1..10}; do
run_command "$i" "$j"
done &
done
wait