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 confirmé
    Inscrit en
    Novembre 2010
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 73
    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 636
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 636
    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.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 814
    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 814
    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)...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  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
    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
    • ...
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  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
    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 confirmé
    Inscrit en
    Novembre 2010
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 73
    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
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 814
    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 814
    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
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

+ 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