我想处理许多文件,并且由于这里有很多核心,所以我想并行执行:
for i in *.myfiles; do do_something $i `derived_params $i` other_params; done
我知道一个Makefile 解决方案,但是我的命令需要将这些参数从shell列表中删除。我发现的是:
> 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"
在循环之后放置了一个指示器,该指示器在活动作业尚未完成之前就已执行。=>这使我认为工作没有完成。