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

C Discussion :

Utiliser une variable d'un script shell


Sujet :

C

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juin 2007
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 51
    Points : 30
    Points
    30
    Par défaut Utiliser une variable d'un script shell
    Bonjour,

    J'ai un script shell (tcsh) , qui me retourne l'adresse ip du pc et le masque :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #!/bin/tcsh 
    set adresse = `/sbin/ifconfig eth0 | grep "inet adr:" | awk '{print $2}' | awk -F ':' '{print $2}'`
    set masque = `/sbin/ifconfig eth0 | grep "inet adr:" | awk '{print $4}' | awk -F ':' '{print $2}'`
    Le truc c'est que dans mon fichier C, j'aurais besoin de prendre l'adresse ip locale et le masque. Et ce meme fichier C, me genere un fichier un html, a l'aide du cgi

    Comment pourrais-je faire ?

    Merci d'avance

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Les programmes C peuvent accéder en lecture seule aux variables d'environnement avec la fonction getenv(). Et on dirait bien qu'elle est standard.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Juin 2007
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 51
    Points : 30
    Points
    30
    Par défaut
    donc je peux faire dans mon programme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strcpy(adress,getenv(adress));
    ?

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Tu peux,mais je déconseillerais d'utiliser la même variable pour le nom de la VE et son contenu...

    Et aussi, je conseillerais de vérifier la taille, si tu joues avec strcpy()...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Nouveau membre du Club
    Inscrit en
    Juin 2007
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 51
    Points : 30
    Points
    30
    Par défaut
    Ok, je changerais le nom.
    Pour la taille si je fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    adresse2 = getenv(adress)
    QU'est-ce que tu en penses ?

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    J'en pense que c'est bon.
    Inutile de faire une copie de la chaîne si tu n'en as pas besoin, et si tu dois vraiment faire une copie, tu peux utiliser strdup().
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Membre éprouvé
    Avatar de Pouic
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 669
    Points : 977
    Points
    977
    Par défaut
    Pourquoi tu ne mettrais pas dans ton script quelque chose comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    echo $masque > data
    echo $adresse >> data
    Et ensuite dans ton code C :
    Software becomes slower faster than hardware becomes faster
    [size=1]
    http://xrenault.developpez.com

  8. #8
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Parce que c'est plus long, plus lent et inutilement plus complexe que de le récupérer en variable d'environnement.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  9. #9
    Nouveau membre du Club
    Inscrit en
    Juin 2007
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 51
    Points : 30
    Points
    30
    Par défaut
    Poulc = poulecaca ?

    je ne comprends pas le >> data ???

  10. #10
    Membre éprouvé
    Avatar de Pouic
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 669
    Points : 977
    Points
    977
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Parce que c'est plus long, plus lent et inutilement plus complexe que de le récupérer en variable d'environnement.
    Je ne suis pas d'accord.
    Le fait de centraliser les données dans un seul fichier permet une maintenance plus aisée en cas d'ajouts/suppressions de variables, plutôt que de faire des suites de getenv (où on risque d'oublier de traiter des choses par exemple).
    Sans parler du fait qu'on évite le soucis éventuel d'écrasement de variables d'environnement par d'autres scripts qui tourneraient en même temps.
    Software becomes slower faster than hardware becomes faster
    [size=1]
    http://xrenault.developpez.com

  11. #11
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Les programmes C peuvent accéder en lecture seule aux variables d'environnement avec la fonction getenv(). Et on dirait bien qu'elle est standard.
    Mais les variables de csh initialisees avec set ne sont pas des variables d'environnement. Il faut utiliser setenv.

    (En sh, ca ne depend pas de la syntaxe d'initialisation mais il faut utiliser export).
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  12. #12
    Membre éprouvé
    Avatar de Pouic
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 669
    Points : 977
    Points
    977
    Par défaut
    Citation Envoyé par GomuSan Voir le message
    Poulc = poulecaca ?
    Gné ? Non, c'est P. O. U. I. C. (avec un i comme Isidore)
    je ne comprends pas le >> data ???
    Euh, ben c'est du shell de base. Ca ajoute la valeur de la variable à la suite dans le fichier de donnée.
    Software becomes slower faster than hardware becomes faster
    [size=1]
    http://xrenault.developpez.com

  13. #13
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet Voir le message
    Mais les variables de csh initialisees avec set ne sont pas des variables d'environnement. Il faut utiliser setenv.

    (En sh, ca ne depend pas de la syntaxe d'initialisation mais il faut utiliser export).
    Ah, il me semblait bien qu'il y avait une différence de ce genre. En fait, j'ai un peu de mal car il y a plus de deux degrés de visibilité pour les variables:
    • Variables d'environnement, dans un script exécuté normalement: Visible dans le script et pour tous les programmes appelés.
    • Variables d'environnement, dans un script exécuté dans le même processus ("source" ou "à la DOS"): Visible dans le script, après le script, et pour tous les programmes appelés pendant et après.
    • Variables normales. Visibles dans le script, mais j'ignore si elles sont visibles des programmes appelés. À vu de nez, je dirais que non, ce qui est gênant dans notre cas...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  14. #14
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Ah, il me semblait bien qu'il y avait une différence de ce genre. En fait, j'ai un peu de mal car il y a plus de deux degrés de visibilité pour les variables:
    • Variables d'environnement, dans un script exécuté normalement: Visible dans le script et pour tous les programmes appelés.
    • Variables d'environnement, dans un script exécuté dans le même processus (à la DOS): Visible dans le script, après le script, et pour tous les programmes appelés pendant et après.
    Ce mode d'execution est celui qu'on optient avec source (ou . en sh).

    • Variables normales. Visibles dans le script, mais j'ignore si elles sont visibles des programmes appelés. À vu de nez, je dirais que non, ce qui est gênant dans notre cas...
    Pas visible dans les programmes appeles. Pas visible apres si le script est executé, visible apres si le script est sourcé.


    (Au fait, moi je passerais simplement des arguments au programme).
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  15. #15
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet Voir le message
    (Au fait, moi je passerais simplement des arguments au programme).
    Oups
    GomuSan et Medinoc, shadoks en herbe...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. Garder en mémoire une variable dans un script shell
    Par Shinzel dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 16/05/2013, 16h54
  2. INSERT INTO une variable d'un script shell
    Par sajodia dans le forum Sql*Plus
    Réponses: 2
    Dernier message: 16/05/2008, 16h10
  3. utiliser une variable d'environement Windows dans un script
    Par pierre.zelb dans le forum VBScript
    Réponses: 2
    Dernier message: 29/11/2006, 15h50
  4. [curseurs] utiliser une variable comme nom de champ
    Par Christian31 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 09/09/2005, 14h12
  5. [XSL] utiliser une variable pour nom d'élément
    Par luta dans le forum XSL/XSLT/XPATH
    Réponses: 13
    Dernier message: 07/09/2004, 13h58

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