J'ai un script bash qui contient d'autres scripts exécutés en série. Cependant, il faut un temps décent pour les exécuter tous. Existe-t-il un moyen d'exécuter ces scripts en parallèle pour améliorer la performance globale? Ils sont indépendants les uns des autres.Exécution de plusieurs scripts dans un script bash parallèle
Il ressemble à:
#!/bin/bash
#some code here
cppcheck.sh
churn.sh
run.sh
Mise à jour:
**git log --pretty=format: --numstat | perl -ane'$c{$F[2]} += abs($F[0]+$F[1])
if $F[2];END {print "$_\t$c{$_}\n" for sort keys %c}' > ${OUTPUT_DIR}/churn.txt**
sed -i -e '/deps/d;/build/d;/translations/d;/tests/d' -e 30q ${OUTPUT_DIR}/churn.txt
sort -r -n -t$'\t' -k2 ${OUTPUT_DIR}/churn.txt -o ${OUTPUT_DIR}/churn.txt
echo "set term canvas size 1200, 800; set output '${OUTPUT_DIR}/output.html';
unset key; set bmargin at screen 0.4; set xtics rotate by -90 scale 0,0;
set ylabel 'Number of lines changed (total)'; set title 'Files with high churn
level';set boxwidth 0.7; set style fill solid; set noborder;
plot '${OUTPUT_DIR}/churn.txt' using 2:xticlabels(1) with boxes" | gnuplot
echo "finished running churn.sh!"
C'est le code à l'intérieur churn.sh. La commande en gras prend environ 40 secondes pour être implémentée. Si dans un script principal je mets l'esperluette après churn.sh &, il jette une erreur disant que sed ne peut pas lire le fichier churn.txt (puisqu'il n'est pas encore créé). Il semble qu'il n'attend pas que la sortie soit enregistrée dans un fichier. J'ai inséré l'attente après cette commande, mais cela n'aide pas.
En outre, un appel à 'wait' s'assurera que le script parent ne se termine pas tant que tous les jobs d'arrière-plan ne sont pas terminés –
@DarkCthulhu Je l'ai déjà utilisé. Le problème est le suivant. Une ligne obtient les données de git en utilisant --numstat et les sort dans un fichier. Ce fichier est ensuite utilisé dans la ligne suivante, mais comme & command commence à exécuter la ligne et passe à la ligne suivante, la ligne suivante renvoie une erreur indiquant que le fichier n'existe pas, car il faut un certain temps pour obtenir les données et enregistrez-le dans un fichier txt. C'est un problème presque similaire dans tous les fichiers de script. – Bdar
@Bdar Vous venez de dire que les scripts sont indépendants les uns des autres. Si vous voulez ajouter un peu de temps entre leurs exécutions, vous pouvez essayer 'sleep n && churn.sh &'. Sinon, vous feriez mieux de les exécuter en séquence. –