for script in ./*.sh; do "$script" & done
wait
Ou para limitar o número de invocações simultâneas, com o GNU xargs
:
xargs -n1 -P5 -r0a <(printf '%sautoload zargs # best in ~/.zshrc
zargs -n1 -P5 ./*.sh -- command
' ./*.sh) env
(cuidado, presume-se que os nomes dos scripts não contenham =
caracteres).
Ou com zsh
:
parallel -j0 exec ::: ./*.sh
(aqui no máximo 5 de cada vez).
Tenha em atenção que, se esses scripts produzirem qualquer resultado, poderão acabar por ficar mal intercalados. O GNU parallel
endereça isso armazenando a saída de cada comando em um arquivo temporário separado e enviando-os em ordem:
for script in ./*.sh; do "$script" & done
wait
( -j0
para executar todos eles em paralelo, remova para limitar o número de núcleos da CPU ou especifique o número).