Saya menggunakan xargs
dengan opsi --max-args=0
(alternatif -P 0
).
Namun, output dari proses digabung ke dalam stdout
aliran tanpa memperhatikan pemisahan garis yang tepat. Jadi saya akan sering berakhir dengan garis-garis seperti:
<start-of-line-1><line-2><end-of-line-1>
Seperti yang saya gunakan egrep
dengan ^
dalam pola saya pada seluruh xargs
output ini mengacaukan hasil saya.
Apakah ada cara untuk memaksa xargs
untuk menulis output proses dalam urutan (urutan apa pun, selama output dari satu proses bersebelahan)?
Atau solusi lain?
Edit: detail lebih lanjut tentang use case:
Saya ingin mengunduh dan mem-parsing halaman web dari host yang berbeda. Karena setiap halaman membutuhkan waktu sekitar satu detik untuk memuat dan ada beberapa lusin halaman saya ingin memparalelkan permintaan.
Perintah saya memiliki bentuk berikut:
echo -n $IPs | xargs --max-args=1 -I {} --delimiter ' ' --max-procs=0 \
wget -q -O- http://{}/somepage.html | egrep --count '^string'
Saya menggunakan bash dan bukan sesuatu seperti Perl karena IP host (variabel $ IP) dan beberapa data lainnya berasal dari file bash yang disertakan.
xargs
sepertinya tidak menyediakan fitur seperti itu.
make
fitur pekerjaan, saya pikir make
menggabungkan jalur output dengan benar.
--line-buffered
bendera untuk egrep
membantu
xargs
.