Voglio elaborare molti file e poiché ho qui un mucchio di core, voglio farlo in parallelo:
for i in *.myfiles; do do_something $i `derived_params $i` other_params; done
Conosco una soluzione Makefile ma i miei comandi hanno bisogno degli argomenti fuori dalla lista dei globbing della shell. Quello che ho trovato è:
> function pwait() {
> while [ $(jobs -p | wc -l) -ge $1 ]; do
> sleep 1
> done
> }
>
Per usarlo, tutto ciò che si deve fare è mettere e dopo i lavori e una chiamata pwait, il parametro fornisce il numero di processi paralleli:
> for i in *; do
> do_something $i &
> pwait 10
> done
Ma questo non funziona molto bene, ad esempio l'ho provato con ad esempio un ciclo for che converte molti file ma mi dà errore e lascia i lavori annullati.
Non riesco a credere che non sia stato ancora fatto poiché la discussione sulla mailing list di zsh è ormai obsoleta. Quindi conosci qualcosa di meglio?
echo "DONE"
dopo il ciclo che è stato eseguito prima che i lavori attivi non fossero finiti. => Questo mi ha fatto pensare che i lavori non fossero stati fatti.