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 :

Portée des variables et sous-shell


Sujet :

Linux

  1. #1
    Membre régulier
    Inscrit en
    Avril 2006
    Messages
    268
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 268
    Points : 101
    Points
    101
    Par défaut Portée des variables et sous-shell
    Bonjour,

    je suis en train de me prendre la tête avec la portée des variables.
    Voici mon problème simplifié :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
          toto=1
     
          (while read ligne
          do
    	     toto=0
          done) < tutu
     
          echo $toto
    Cela renvoie 1, apparemment cela s'explique par le fait que les parenthèses exécutent un sous-shell et la variable de ce sous-shell n'est pas répercutée au reste du script.

    Ma question est donc comment faire pour que ce script me renvoie 0 ?

    Merci

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 720
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 720
    Points : 31 043
    Points
    31 043
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par hacksi Voir le message
    Bonjour,

    je suis en train de me prendre la tête avec la portée des variables.
    Voici mon problème simplifié :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
          toto=1
     
          (while read ligne
          do
    	     toto=0
          done) < tutu
     
          echo $toto
    Cela renvoie 1, apparemment cela s'explique par le fait que les parenthèses exécutent un sous-shell et la variable de ce sous-shell n'est pas répercutée au reste du script.
    D'une façon générale, il n'est pas possible à un sous-processus de remonter une variable vers son père. C'est dû au fait qu'il y a indépendance totale des zones mémoires utilisées par les processus (et c'est heureux car grâce à ça, tout virus quel qu'il soit ne pourra jamais sortir de son espace de travail et infecter la machine).
    Maintenant, le moyen le plus simple à un sous-processus de renvoyer une variable vers son père est d'utiliser un fichier. Il écrit dans le fichier et le père va lire le fichier. Lourd mais efficace.

    Toutefois, dans ton cas à toi, tu n'as pas à faire ça car tu n'as aucune raison de mettre des parenthèses

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #!/bin/sh
    toto=1
     
    while read ligne
    do
        toto=0
    done < tutu
     
    echo $toto
    Pas de parenthèse => pas de sous-processus et ta variable "toto" vaut 0.


    Citation Envoyé par hacksi Voir le message
    Ma question est donc comment faire pour que ce script me renvoie 0 ?
    Attention à la terminologie. "renvoyer" signifie "code d'état", "status" et se retrouve dans la variable "$?". Toi, tu veux que ton script "affiche 0" et non "renvoie 0"...

  3. #3
    Membre régulier
    Inscrit en
    Avril 2006
    Messages
    268
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 268
    Points : 101
    Points
    101
    Par défaut
    Ah oui exact merci. Jusqu'à présent je n'avais vu que des exemples avec les parenthèses, je pensais donc que ça ne marcherait pas sans !

  4. #4
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 720
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 720
    Points : 31 043
    Points
    31 043
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par hacksi Voir le message
    Ah oui exact merci. Jusqu'à présent je n'avais vu que des exemples avec les parenthèses, je pensais donc que ça ne marcherait pas sans !
    C'est assez pratique quand on veut se déplacer quelque part puis revenir sans se faire suer à récupérer le pwd
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #!/bin/sh
     
    <... travail quelconque ...>
     
    # Sous-processus
    (
        # On va ailleurs
        cd ailleurs
     
        <.... autre travail ailleurs ...>
    ) # Fin de sous-processus => on est de retour là où on était avant le "cd"
    Mais il y a l'inconvénient des variables à faire remonter...

  5. #5
    Membre régulier
    Inscrit en
    Avril 2006
    Messages
    268
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 268
    Points : 101
    Points
    101
    Par défaut
    D'accord, merci pour l'astuce.

    Je suis plutôt habitué à la programmation "traditionnelle" et j'avoue que le shell me perturbe pas mal lol.

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

Discussions similaires

  1. Shell et portée des variables et invocation de fonction via $()
    Par pfxxx dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 16/04/2015, 20h53
  2. portée des variables en shell
    Par jejeman dans le forum Linux
    Réponses: 6
    Dernier message: 06/06/2010, 18h52
  3. Portée des variables vbscript vers ASP
    Par Immobilis dans le forum ASP
    Réponses: 3
    Dernier message: 03/11/2004, 10h14
  4. [XSL]Problème de portée des variables
    Par djulesp dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 17/09/2004, 10h34
  5. [Portée] portée des variables
    Par parksto dans le forum Langage
    Réponses: 7
    Dernier message: 09/05/2004, 21h05

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