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 :

Execution d'un script shell depuis un code C


Sujet :

C

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Execution d'un script shell depuis un code C
    Je voudrais executer un script shell depuis un code C. Je passe par un fork et je fais un execvp dans le fils. Pour un programme ca marche sans probleme mais pas moyen d'executer un script meme basique.
    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if ((pid = fork()) == 0) 
    	{
    		char* argv[2];				
    		argv[0] = "./script.sh";		
    		argv[1] = NULL;				
                    execvp("./script.sh", argv);	
    	}
    mon script fais juste un echo reussi.
    EDIT : L'erreur renvoyé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Xlib: unexpected async reply (sequence 0x17e4)!
    a terme mon script utilisera des iptables
    Merci de votre aide.

  2. #2
    Membre éclairé
    Avatar de D[r]eadLock
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    504
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 504
    Points : 750
    Points
    750
    Par défaut
    Euh, qui te donne le message d'erreur ?


    Parcqu'avec ça, ça marche:
    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
    19
    #include <stdio.h>
    #include <sys/types.h>
    #include <unistd.h>
     
     
    int main(void)
    {
        int pid;
        if ((pid = fork()) == 0) 
        {
            char* argv[2];              
            argv[0] = "./script.sh";        
            argv[1] = NULL;             
            execvp("./script.sh", argv);   
        } else {
           printf("Father (pid:%d)\n",pid);
        }
        return 0;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #!/bin/sh
    echo "Message a deux francs"
    Rq: le script est 'executable' (chmod +x).

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    L'erreur m'est donnée par le terminal.
    J'ai essayer ton code dans un programme a part et ca marche sans probleme.
    Si j'execute ton code (essai) depuis mon programme principal il m'affiche le pid du pere mais n'excute pas le script. Si je remplace "mon" execvp par le tien dans le code principal j'ai toujours la meme erreur.
    Je vais essayer de voir dans le reste du programme mais tout marche bien si je commente le execvp ou si mets autre chose qu'un script.

  4. #4
    Membre éclairé
    Avatar de D[r]eadLock
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    504
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 504
    Points : 750
    Points
    750
    Par défaut
    Euh, comment es-tu sur qu'il n'execute pas ton script ? Essaie de mettre un "touch tmp/toto" dedans et vois si te fichier est cree/update (la date). C'est peut-etre juste de stdout du script qui est ferme et c'est peut-etre pour ca que Xlib se plaint.

    Essaie peut-etre aussi de mettre des chemins absolus au script.

  5. #5
    Membre actif Avatar de Pikwik
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2006
    Messages : 237
    Points : 252
    Points
    252
    Par défaut
    Petite idée simple
    Tu demandes d'executer un script .sh mais dis tu avec quel programme l'interpreter ?

    je pensais à une commande du type :
    "/bin/sh .script.sh" au lieu du "script.sh"

    Bon après c'est juste une idée...

  6. #6
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Citation Envoyé par Pikwik
    Petite idée simple
    Tu demandes d'executer un script .sh mais dis tu avec quel programme l'interpreter ?

    je pensais à une commande du type :
    "/bin/sh .script.sh" au lieu du "script.sh"

    Bon après c'est juste une idée...
    Si son script est bien fait, il aura un
    !#/bin/sh

    Au debut de son script.
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

  7. #7
    Membre actif Avatar de Pikwik
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2006
    Messages : 237
    Points : 252
    Points
    252
    Par défaut
    Je restais sur l'idée (l'ayant lu dans je nais plus quel forum), qu'il était préférable de préciser avec quel interpreteur on veut executer le script, car l'execution d'un script automatiquement est soumis à certains paramètrages.

Discussions similaires

  1. [PHP 5.4] executer script shell depuis page php
    Par tintin3158 dans le forum Langage
    Réponses: 0
    Dernier message: 18/07/2013, 11h29
  2. Executer un script Python depuis un code C++
    Par Niak74 dans le forum C++
    Réponses: 4
    Dernier message: 02/02/2011, 10h19
  3. Réponses: 1
    Dernier message: 15/02/2009, 07h45
  4. Réponses: 3
    Dernier message: 31/07/2006, 15h07
  5. Exécution d'un script shell
    Par Manu0086 dans le forum Linux
    Réponses: 8
    Dernier message: 15/06/2004, 16h31

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