Parallelize Bash script con número máximo de procesos

Digamos que tengo un bucle en Bash:

for foo in `some-command`
do
   do-something $foo
done

do-something está vinculado a la CPU y tengo un bonito y brillante procesador de 4 núcleos. Me gustaría poder correr hasta 4do-somethingEs a la vez.

El enfoque ingenuo parece ser:

for foo in `some-command`
do
   do-something $foo &
done

Esto correrátodas do-somethings a la vez, pero hay un par de inconvenientes, principalmente que hacer algo también puede tener algunas E / S significativas que funcionantodas a la vez podría disminuir un poco. El otro problema es que este bloque de código vuelve inmediatamente, por lo que no hay forma de hacer otro trabajo cuando todo eldo-somethings están terminados.

¿Cómo escribirías este bucle para que siempre haya Xdo-somethings corriendo a la vez?

Respuestas a la pregunta(16)

Su respuesta a la pregunta