J'ai un script bash qui ressemble à ceci :
#!/bin/bash
wget LINK1 >/dev/null 2>&1
wget LINK2 >/dev/null 2>&1
wget LINK3 >/dev/null 2>&1
wget LINK4 >/dev/null 2>&1
# ..
# ..
wget LINK4000 >/dev/null 2>&1
Mais traiter chaque ligne jusqu'à ce que la commande soit terminée puis passer à la suivante est très chronophage, je veux traiter par exemple 20 lignes à la fois puis quand elles sont terminées, traiter 20 autres lignes.
J'ai pensé à wget LINK1 >/dev/null 2>&1 &
pour envoyer la commande en arrière-plan et continuer, mais il y a 4000 lignes ici cela signifie que je vais rencontrer des problèmes de performance, sans parler du fait que je serai limité en termes de combien de processus je devrais démarrer en même temps, donc ce n'est pas une bonne idée.
Une solution à laquelle je pense actuellement est de vérifier si l'une des commandes est encore en cours d'exécution ou non, par exemple après 20 lignes je peux ajouter cette boucle :
while [ $(ps -ef | grep MOTCLE | grep -v grep | wc -l) -gt 0 ]; do
sleep 1
done
Évidemment, dans ce cas, je devrai ajouter & à la fin de la ligne ! Mais j'ai le sentiment que ce n'est pas la bonne manière de le faire.
Alors comment regrouper réellement chaque 20 lignes ensemble et attendre qu'elles terminent avant de passer aux 20 lignes suivantes, ce script est généré de manière dynamique donc je peux faire tout le calcul que je veux dessus pendant son génération, mais il N'A PAS besoin d'utiliser wget, c'était juste un exemple donc toute solution spécifique à wget ne me sera d'aucune utilité.