Я хочу обработать много файлов, и так как у меня здесь куча ядер, я хочу сделать это параллельно:
for i in *.myfiles; do do_something $i `derived_params $i` other_params; done
Я знаю решение Makefile, но мои команды нуждаются в аргументах из списка глобализации оболочки. То, что я нашел, это:
> function pwait() {
> while [ $(jobs -p | wc -l) -ge $1 ]; do
> sleep 1
> done
> }
>
Чтобы использовать его, все, что нужно сделать, это поставить и после заданий и вызова pwait, параметр дает количество параллельных процессов:
> for i in *; do
> do_something $i &
> pwait 10
> done
Но это работает не очень хорошо, например, я попробовал это, например, с помощью цикла for, конвертирующего много файлов, но из-за которого я получил ошибку и оставил задания отмененными.
Я не могу поверить, что это еще не сделано, так как обсуждение списка рассылки zsh уже давно. Так ты знаешь лучше?
echo "DONE"
после цикла, который выполнялся до того, как активные задания не были завершены. => Это заставило меня думать, что работа не выполнена.