IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Lancement de Matlab dans une boucle while bash : arrêt de l'itération


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2016
    Messages : 11
    Par défaut Lancement de Matlab dans une boucle while bash : arrêt de l'itération
    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 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 ?

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 653
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     rm ../RES_SIGMA/res_sigma.txt
     mv ../RES_SIGMA/tmp.txt ../RES_SIGMA/res_sigma.txt
     gzip SIGMA.data
     cd ..
     
    done <-Ça n'a rien a faire là.
    PS: c'est "iNput", comme dans "put into"
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2016
    Messages : 11
    Par défaut
    Enfait si, j'ai juste mal copié le script et oublié une bonne partie dedans. Ce "done" finit le "for" qui est auparavant. Et ce script est fonctionnel car il marche si je le lance en dehors du premier script bash qui le faisait intervenir. C'est une sorte d'intéraction entre les deux qui semble avoir lieu ... Je n'ai pas assez de recul sur le sujet pour y voir plus clair !


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    #!/bin/bash
     
    #Attention un mechant rm suit 
    #rm RES_SIGMA/*
    rm RES_SIGMA/res_sigma.txt
    touch RES_SIGMA/res_sigma.txt
    #SIGMAT="sigm_add2.m"
    SIGMAT="sigma_fit.m"
     
    #Boucle sur les repertoires
    #for (( gvmin=0 ; gvmin <= 300 ; gvmin=gvmin+10 ))
    for (( gvmin=00 ; gvmin <= 0 ; gvmin=gvmin+10 ))
    do
     
     let "gvmax=$gvmin+1000"
     echo gvmin = $gvmin
     echo gvmax = $gvmax
     
     rep=$(printf "exp_gvmin_%03d" $gvmin)
     
     #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

Discussions similaires

  1. [Tkinter] Méthode get() dans une boucle while
    Par Thundie dans le forum Tkinter
    Réponses: 2
    Dernier message: 04/02/2006, 00h06
  2. Problème de SCANF dans une boucle WHILE
    Par FidoDido® dans le forum C
    Réponses: 4
    Dernier message: 30/12/2005, 17h42
  3. [Conception] Problème de test dans une boucle while
    Par Cyrius dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 26/11/2005, 18h07
  4. Réponses: 6
    Dernier message: 17/06/2005, 16h51
  5. [MFC] Dialog dans une boucle while
    Par oxor3 dans le forum MFC
    Réponses: 5
    Dernier message: 23/04/2004, 22h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo