Bonjour à tous !
Voici le topo : J'ai un programme qui tourne, prenant en compte des paramêtres d'imput étant stockés dans un fichier .par. Mon étude consiste à modifier ces paramètres et voir ce que ça va donner sur le résultat final. J'ai pour cela crée un script bash qui dans une boucle lit la valeur des paramètres dans un fichier de données, modifie le fichier de paramètres d'imput de mon programme, puis lance le programme, et ainsi de suite jusqu'à ce qu'il ai fait toutes les lignes du fichier de données, soit tous les paramètres que je voulais tester.
Voici le script Bash faisant tout ça :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| #!/bin/bash
IMPUTFILE="Lambda.par"
PARFILE="dun_explo.par.mmm"
echo "Valeurs sous la forme : Dep Trans Truc Scale" > scale.txt
echo " " >> scale.txt
while IFS=' ' read Trans Dep
do
echo $Trans
echo $Dep
##Changement du fichier PAR
varline=$(cat $PARFILE | grep "Lambda_C =")
var1="Lambda_C = ${Dep}"
sed -i.bak "s/^${varline}.*/${var1}/" ${PARFILE}
#sed -i "27s/${varline}/${var1}/" ${PARFILE}
varline2=$(cat $PARFILE | grep "Lambda_T =")
var2="Lambda_T = ${Trans}"
sed -i.bak "s/^${varline2}.*/${var2}/" ${PARFILE}
#sed -i "30s/${varline2}/${var2}/" ${PARFILE}
##Lancement de l'analyse lineaire
./run.bash
./matlab.bash
cd exp_gvmin_000
VARSAVE=$(head -1 res_save.txt)
cd ..
echo "$Dep $Trans $VARSAVE" >> scale.txt
done < $IMPUTFILE |
Le run.bash est un autre script faisant tourner le programme, et le matlab.bash est un script dont la fonction principale est de lancer matlab, de faire un calcul et de sauvegarder les résultats.
Le problème : une seule itération se fait, puis le script s'arrête. A noter que lorsque je commente la ligne , toutes les itérations se font (une itération correspondant à une ligne de mon fichier d'imput dans lequel sont stockées toutes les valeurs des paramètres que je veux tester).
Le script matlab.bash est le suivant :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| #Debut manip matlab
echo ------------------------
sed s/AAAA/$gvmin/ $SIGMAT > $rep/$SIGMAT
cp movav.m $rep/.
cp disp_fun.m $rep/.
cp twocol.pl $rep/.
cd $rep
pwd
echo ------------------------
gunzip SIGMA.data.gz
#matlab -nojvm -nosplash -r sigm_add2
#matlab -nodesktop -nosplash -r $SIGMAT
matlab -nodesktop -nosplash -r sigma_fit
# cp Growth_rate*.png ../RES_SIGMA/.
head -1 sig_save.txt > res_save.txt
cat ../RES_SIGMA/res_sigma.txt res_save.txt > ../RES_SIGMA/tmp.txt
# rm sig_save.txt
rm ../RES_SIGMA/res_sigma.txt
mv ../RES_SIGMA/tmp.txt ../RES_SIGMA/res_sigma.txt
gzip SIGMA.data
cd ..
done |
Autrement dit, c'est un script bash commun avec la ligne
matlab -nodesktop -nosplash -r sigma_fit
qui lance un script matlab de calcul.
Tout tourne bien, et on arrive bien à la fin de la première itération du premier script bash puisque les commandes
1 2 3 4
| cd exp_gvmin_000
VARSAVE=$(head -1 res_save.txt)
cd ..
echo "$Dep $Trans $VARSAVE" >> scale.txt |
s'effectuent comme il faut. Mais tout s'arrête ensuite...
Une idée ?
Partager