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 :

Envoyer des paramètres au shell appelant


Sujet :

C

  1. #1
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2008
    Messages
    464
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Mars 2008
    Messages : 464
    Par défaut Envoyer des paramètres au shell appelant
    Bonjour,
    A partir d'un shell appelant le C, j'aimerais récupérer dans le shell des paramètres calculés dans le c.

    Je m'explique
    Code du shell:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ./programme-c
    echo "je récupère $mon-parametre-passe"
    Code du programme-c.c
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    int main {
     char *mon-paramètre-passe="je passe mon paramètre";
    /* Ici le code pour passé mon paramètre au shell applant */
     return 0
    }
    Si quelqu'un a une réponse c serait cool merci

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 404
    Par défaut
    Le seul moyen que je vois, c'est d'écrire cela dans un fichier (ou de rediriger la sortie standard vers un fichier). Il est impossible de modifier directement les variables du shell parent.
    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
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 404
    Par défaut
    En fait, si tu es sous nux, je te conseille d'écrire directement les réponses sur la sortie standard, et de l'analyser ensuite depuis le shell.
    N'oublie pas l'opérateur backquote (a = `./programme-c`) qui signifie "mettre la sortie standard de ce programme dans une variable".
    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.

  4. #4
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2008
    Messages
    464
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Mars 2008
    Messages : 464
    Par défaut
    Et la fct putenv?

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 404
    Par défaut
    Elle ne marche que pour le programme courant et ses futurs fils.
    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.

  6. #6
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2008
    Messages
    464
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Mars 2008
    Messages : 464
    Par défaut
    Ok; je devrais m'en tirer avec la commande
    dans le shell

    Mais comme dans mon programme c, j'envois plus d'un paramètre j'avais pensé faire un truc du genre :

    programme-c.c
    Code : 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
    17
    18
     
    #include <stdio.h>
    int main {
     char param[500];
     char param1[10];
     char param2[10];
     char param1_env[50];
     char param2_env[50];
    /* evaluation de param1 et param2*/
     
     sprintf(param1_env,"PARAM1=%s\n",param1);
     sprintf(param2_env,"PARAM2=%s\n",param2);
     strcpy(param,param1_env);
     strcat(param,param2_env);
     
    /* Ici je retourne param grace à l'instruction return, seul problème je n'ai pas trouvé 
     la syntaxe exacte */
    }
    shell-appelant.sh
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    `./programme-c`
    # Ici utilisation de PARAM1 et PARAM2
    Est ce que cette solution fonctionne et si oui comment dois je retourner ma variable param

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 404
    Par défaut
    Je pense que tu vas devoir tout retourner dans une seule chaîne, et parser la chaîne dans ton script...
    Même si pour cela, je serais du genre à conseiller un langage de script plus évolué que le script shell, genre du PERL...
    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.

  8. #8
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Je pense que tu vas devoir tout retourner dans une seule chaîne, et parser la chaîne dans ton script...
    Même si pour cela, je serais du genre à conseiller un langage de script plus évolué que le script shell, genre du PERL...
    bah pour un petit truc comme ça awk fera l'affaire..

  9. #9
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Par défaut
    Dans ton programme C tu peux afficher des affections façon shell :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    printf("VAR1=%s\n", var1);
    printf("VAR2=%s\n", var2);
    Et ensuite les évaluer avec eval dans ton shell :

  10. #10
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2008
    Messages
    464
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Mars 2008
    Messages : 464
    Par défaut
    C pas mal ça je vais essayer
    Merci

  11. #11
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 554
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 554
    Par défaut
    Citation Envoyé par VITALTH Voir le message
    C pas mal ça je vais essayer
    Merci
    Vois surtout du côté de xargs si tu veux bâtir une ligne de commande argumentée à partir d'un programme. Il y a d'autres moyens de faire, bien sûr, mais cette commande est faite pour ça.

  12. #12
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Par défaut
    xargs ne peux pas être utilisé dans ce cas puisque eval est un shell built-in et pas une commande.

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

Discussions similaires

  1. PHP Envoyer des paramètre au fichier CSS
    Par Prosis dans le forum Mise en page CSS
    Réponses: 7
    Dernier message: 24/10/2007, 08h47
  2. Réponses: 17
    Dernier message: 06/04/2007, 12h53
  3. Envoyer des paramètres à une url
    Par joKED dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 08/03/2007, 13h22
  4. [FLASH 8] Envoyer des paramètres de flash à java
    Par jbidou88 dans le forum Flash
    Réponses: 12
    Dernier message: 21/09/2006, 10h31
  5. Réponses: 5
    Dernier message: 12/06/2006, 16h23

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