Passage arguments script shell langage c

Bonjour,

Voici mon problème : j'utilise la fonction system pour exécuter un script shell dans un programme en langage c. Ce scipt shell possède des arguments ( $1 , $2 ...). J'aimerais pouvoir saisir ces arguments dans mon programme en langage c. J'ai cherché et tenté la commande suivante :
execl("mon script", argv[1],argv[2],(char*)NULL).
J'ai donc pensé que $1 correspondrait à argv[1] et ainsi de suite. Mais cette commande ne fonctionne pas. Quelqu'un pourrait m'expliquer pourquoi et me dire comment faire.
Merci d'avance pour votre aide.
Configuration: Windows Vista
Firefox 3.0.6

9 réponses

  1. Bon j'ai trouvé la solution la commande est :

    retour = execl("/bin/sh","sh","nom_script",argv[1],argv[2],NULL);

    Mais après l'exécution de cette commande, le reste du programme ne s'exécute pas.
    1
    1. Contributeur
      Quand je disais "/bin/sh arg0 arg1", je sous-entendais de faire une chaîne de caractères qui contiendra la valeur de l'argument argv[0] argv[1] définit à l'exécution. Tu peux utiliser pour ça la fonction snprintf.
      Par exemple :
      char commande[150];
      snprintf(commande,sizeof commande,"/bin/sh tonscript script %s %s %s",argv[1], argv[2], argv[3]);
      system(commande);
      
      1
      1. Contributeur
        Salut,
        Tu as oublié de te donner l'argument correspondant en bash à $0.
        Ce qui donnerait :
        execl("mon script", "nomScript",argv[1],argv[2],NULL);

        Cdlt
        0
        1. Merci pour ton aide.
          Je m'en suis rendu compte mais cela ne fonctionne toujours pas. Voici ma ligne de code :

          int retour;
          retour = execl("/home/mon_script","mon script",argv[1],argv[2],NULL);v
          Ensuite je teste la valeur de retour et affiche une éventuelle erreur à l'aide de perror. Voici le retour :
          Exec format error.

          Une idée ?
          0
          1. Contributeur
            Probablement parce que tu n'as pas mis de shebang dans ton script.
            Dans ton fichier script, mets en première ligne :
            #!/bin/sh
            (à adapter suivant le chemin à sh).
            0
            1. Contributeur
              Oui, c'est normal puisque l'image du processus sera changée par celle du programme appelée.
              En gros, après execl les instructions ne seront pas exécutées, sauf en cas d'erreur.
              Si tu veux continuer les instructions d'après, il ne faut pas utiliser la famille exec, mais system.
              Tu vas devoir te créer une chaîne contenant "tonscript arg0 arg1 arg2" ou "/bin/sh tonscript arg0 arg1 arg2" (si tu n'as pas mis de shebang) et le faire passer en argument à system.
              0
              1. Salut,

                Les arguments de mon scripts ne sont pas fixes. C'est pour cela que j'utilise argv[1] et argv[2]. avec system je suis obligé de les rentrer en dur. Non?
                0
                1. C'est une très bonne idée! Merci beaucoup pour ton aide.
                  0
                  1. Merci beaucoup ça marche parfaitement. J'espère un jour te renvoyer l'ascenseur.
                    Merci bonne fin de week-end.
                    0