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

Linux Discussion :

Problème de modification de variable dans une boucle


Sujet :

Linux

  1. #1
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut Problème de modification de variable dans une boucle
    Bonjour,

    J'ai un sushi avec KSH et la modification d'une variable (un incrément) dans une boucle while (certes, un peu spéciale...) :

    1. Mon incrément possède une certaine valeur à l'entrée de la boucle, disons 10
    2. Je fait une boucle "cat fichier | while read VARIABLE" qui modifie la valeur de l'incrément. Lorsque j'affiche la valeur de la variable, tout se passe bient : 11, 12, 13...[/list]
    3. En sortie de boucle, je réaffiche la valeur de ma variable : je trouve 10

    J'imagine que c'est parce que le cat ... | while lance un processus-fils et que du coup, la modification n'est pas remontée au processus parent.

    Connaissez-vous un moyen de conserver la valeur modifier ? Je travaille sur un Linux RHAS 2.1.

    Voici un petit code d'exemple (le fichier foo contient 4 lignes) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #!/bin/ksh
     
    INCREMENT=10
    echo "Debut : $INCREMENT"
    cat foo | while read LINE
    do
            export INCREMENT=$((INCREMENT + 1))
            echo $INCREMENT
    done
    echo "FIN : $INCREMENT"
    La sortie est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Debut : 10
    11
    12
    13
    14
    FIN : 10

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  2. #2
    Expert confirmé
    Avatar de Katyucha
    Femme Profil pro
    DevUxSecScrumOps Full Stack Bullshit
    Inscrit en
    Mars 2004
    Messages
    3 287
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Irlande

    Informations professionnelles :
    Activité : DevUxSecScrumOps Full Stack Bullshit

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 287
    Points : 5 075
    Points
    5 075
    Par défaut
    Ton analyse est bonne en effet, c'est une question de parent/fils...

    Pourquoi pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #!/bin/ksh 
     
    INCREMENT=10 
    echo "Debut : $INCREMENT" 
    cat foo | while read LINE 
    do 
            export INCREMENT=$((INCREMENT + 1)) 
            echo $INCREMENT > /tmp/temporaire
    done 
    INCREMENT=`cat /tmp/temporaire`;
    rm /tmp/temporaire
    echo "FIN : $INCREMENT"
    mais c'est barbare avouons le ...
    Par contre, ca m'étonne que la variable d'environnement n'est pas a jour...
    As tu essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INCREMENT=$((INCREMENT + 1)) 
    export INCREMENT
    au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    export INCREMENT=$((INCREMENT + 1))
    ?
    Grave urgent !!!

  3. #3
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    Le coup de l'export ne marche pas.

    J'ai bien pensé au fichier, mais c'est pas top.

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  4. #4
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    J'ai trouvé Faut faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while read VARIABLE
    do
        ...
    done < foo

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 10/01/2013, 11h07
  2. [ANT] affectation de variables dans une boucle
    Par dino_xrc dans le forum ANT
    Réponses: 6
    Dernier message: 17/12/2007, 19h47
  3. [VB.net] Declaration variable dans une boucle for
    Par nico10gbb dans le forum Windows Forms
    Réponses: 4
    Dernier message: 10/05/2006, 11h45
  4. Réponses: 6
    Dernier message: 17/03/2006, 12h23
  5. [langage] incrementation de variable dans une boucle
    Par mimilou dans le forum Langage
    Réponses: 15
    Dernier message: 16/04/2004, 13h23

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