Paralelize o script Bash com o número máximo de processos

Digamos que eu tenho um loop no Bash:

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

do-something é ligado à CPU e eu tenho um bom processador de 4 núcleos brilhante. Eu gostaria de poder executar até 4do-somethingé de uma vez.

A abordagem ingênua parece ser:

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

Isso vai corrertudo do-somethings de uma só vez, mas há algumas desvantagens, principalmente que algo que pode fazer também pode ter alguma E / S significativa quetudo ao mesmo tempo pode diminuir um pouco. O outro problema é que esse bloco de código retorna imediatamente, portanto, não há como fazer outro trabalho quando todas asdo-somethings estão terminados.

Como você escreveria esse loop para que sempre haja Xdo-somethingestá funcionando de uma vez?

questionAnswers(16)

yourAnswerToTheQuestion