J'ai une boucle for et je veux la traiter 4 fois en parallèle à la fois. J'ai essayé le code suivant de la page https://unix.stackexchange.com/questions/103920/parallelize-a-bash-for-loop:Exécutions parallèles dans les lots N-process dans BASH
task(){
sleep 0.5; echo "$1";
}
N=4
(
for thing in a b c d e f g; do
((i=i%N)); ((i++==0)) && wait
task "$thing" &
done
)
J'ai stocké le fichier ci-dessus test.sh, la sortie, je l'obtiens est la suivante:
path$ ./test.sh
a
b
c
d
path$ e
f
g
et le curseur n » t revenir à mon terminal après 'g', il attend/dort indéfiniment.Je veux que le curseur revienne à mon terminal et aussi je ne comprends pas pourquoi la sortie 'e' a mon chemin qui le précède, ne devrait pas la sortie être affiché comme 'a' à 'g' en continu et le code devrait s'arrêter?
Votre code fera les 7 choses dans la boucle juste une fois, parce que la boucle est pas dans une autre boucle. Pourtant, vous dites que vous voulez traiter la boucle 4 fois? Alors, y a-t-il vraiment 28 choses à traiter? –
Quelle devrait être la commande globale? a, b, c & d courent tous en parallèle jusqu'à ce que tout ait fini, alors e, f, g & a courent tous en parallèle jusqu'à ce qu'ils finissent tous peut-être? –
oui @MarkSetchell Je veux faire un, b, c & d tous courir en parallèle jusqu'à ce que tous ont fini, puis e, f, g & a tous courir en parallèle jusqu'à ce qu'ils finissent tous – pku