Chcę przetwarzać wiele plików, a ponieważ mam tutaj kilka rdzeni, chcę to zrobić równolegle:
for i in *.myfiles; do do_something $i `derived_params $i` other_params; done
Znam rozwiązanie Makefile , ale moje polecenia wymagają argumentów z listy globowania powłoki. Znalazłem:
> function pwait() {
> while [ $(jobs -p | wc -l) -ge $1 ]; do
> sleep 1
> done
> }
>
Aby go użyć, wystarczy umieścić & po zadaniach i wywołanie oczekujące, parametr podaje liczbę równoległych procesów:
> for i in *; do
> do_something $i &
> pwait 10
> done
Ale to nie działa zbyt dobrze, np. Próbowałem z np. Konwersją wielu plików w pętli for, ale dałem mi błąd i pozostawiłem zadania cofnięte.
Nie mogę uwierzyć, że nie zostało to jeszcze zrobione, ponieważ dyskusja na liście mailingowej zsh jest już tak stara. Czy znasz coś lepszego?
echo "DONE"
po pętli, która została wykonana, zanim aktywne zadania nie zostały zakończone. => To sprawiło, że pomyślałem, że prace nie zostały wykonane.