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 :

Mettre à jour variable : scripts fils -> script père


Sujet :

Shell et commandes GNU

  1. #1
    Membre du Club
    Inscrit en
    Novembre 2010
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 73
    Points : 61
    Points
    61
    Par défaut Mettre à jour variable : scripts fils -> script père
    Bonsoir,
    J'ai un script Shell (on va le nommer A) avec une variable : varA='8.2'
    Toujours dans ce shell j'appelle un second shell A' qui utilise ma variable varA et qui doit la mettre à jour du style : varA='9.1' pour être utilisé à nouveau dans A avec la nouvelle valeur.

    Cependant, dans mon shell A j'ai fais un :
    export varA='8.2'
    Elle se retrouve donc visible par tous les shell fils de A.
    Mais comment faire pour que les scripts fils mettent à jour cette variable? Avec un export ça ne va que dans le sens père -> fils.

    Merci de vos réponses.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 587
    Points : 19 467
    Points
    19 467
    Par défaut
    Bonjour,

    ça n'arrivera jamais !
    à moins de sourcer les scripts enfants, qui, alors, s'exécutent dans le script qui les appelle, et non plus dans un sous-interpréteur.

  3. #3
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 721
    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 721
    Points : 31 044
    Points
    31 044
    Billets dans le blog
    1
    Par défaut
    Salut
    C'est impossible. En fait, l'export effectue une simple recopie de la variable dans l'environnement du fils (qui, sinon reste vierge).
    Et donc quand le fils modifie sa propre copie, cela n'influe en rien sur la variable d'origine

    Eventuellement tu peux tricher un tout petit peu. Dans ton fils, tu effectues un unique echo $varA. Mais attention, il faut que cet echo soit le seul de tout le script.
    Et dans ton père, tu écris varA=$(script2)...

  4. #4
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Points : 28 129
    Points
    28 129
    Par défaut
    Bonjour,

    Pour ton information, c'est de la communication inter-processus que tu cherches a faire (IPC). Il existe pleins de methodes, parmi lesquelles :
    • le fichier
    • la base de donnee
    • la memoire partagee
    • les sockets (TCP ou Unix, selon)
    • les pipes nommes
    • ...

  5. #5
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Points : 5 849
    Points
    5 849
    Par défaut
    Ton second shell est-il nécessairement un shell?

    Si tu peux coder ce que fait ton "second shell" dans une fonction, c'est gagné, car les variables y sont dynamiques. Dans cet exemple, la fonction incremente_varA utilise la valeur de varA et modifie le contenu de la variable varA:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #!/bin/ksh
    # Mon programme principal
     
    varA=0
     
    function incremente_varA {
        $((varA+=1))
    }
     
    echo $varA
    incremente_varA
    echo $varA

  6. #6
    Membre du Club
    Inscrit en
    Novembre 2010
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 73
    Points : 61
    Points
    61
    Par défaut
    Bonsoir,
    Merci à tous pour vos réponses.
    Je me doutais bien que ça serait compliqué.

    J'ai donc utilisé la méthode de Sve@r. Ca marche nikel

    Encore un grand merci à tous.

  7. #7
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 721
    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 721
    Points : 31 044
    Points
    31 044
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par neGo33 Voir le message
    J'ai donc utilisé la méthode de Sve@r. Ca marche nikel
    Mouais. J'ai donné cette méthode car elle existe mais elle ne me plait que moyennement. Etant donné que ton fils ne fait qu'un echo unique, il ne semble pas super primordial de rester un script isolé. Surtout qu'il semble vraiment lié à son père alors pourquoi en est-il séparé physiquement ? Fait-il vraiment un travail nécessitant qu'il soit indépendant ? Sera-t-il un jour utilisé par un autre programme ou simplement par un utilisateur ?

    Pour moi, la méthode de jack-ft semble meilleure (avec une petit changement toutefois car je n'aime pas vraiment que les fonctions puissent modifier les variables principales du script)
    Code sh : 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
    #!/bin/sh
    # Mon programme principal
     
    function incremente {
        # Création d'un contexte spécifique pour ne pas risquer de pourrir les variables de mon script)
        (
            # Travail dans ce contexte => même si j'écris i=0 je suis certain de ne pas écraser par accident le "i" de mon script principal
            expr $1 + 1
        )
    }
     
    varA=0
     
    echo $varA
    varA=$(incremente $varA)
    echo $varA

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

Discussions similaires

  1. [XL-2007] mettre à jour une cellule à partir d'un script vba
    Par google_c# dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 04/01/2011, 13h51
  2. script c pour mettre une variable ds un fichier
    Par majong dans le forum Linux
    Réponses: 3
    Dernier message: 13/03/2008, 15h57
  3. Réponses: 0
    Dernier message: 12/11/2007, 14h13
  4. variable contient la chaine "<script language="javascript"></script>"
    Par karimphp dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 16/03/2007, 10h02
  5. Mettre à jour une BD via script
    Par steelidol dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 11/01/2007, 17h21

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