Passage arguments script shell langage c

Fermé
sebjuve Messages postés 19 Date d'inscription vendredi 13 février 2009 Statut Membre Dernière intervention 4 juin 2009 - 22 févr. 2009 à 13:24
sebjuve Messages postés 19 Date d'inscription vendredi 13 février 2009 Statut Membre Dernière intervention 4 juin 2009 - 22 févr. 2009 à 16:09
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.
A voir également:

9 réponses

sebjuve Messages postés 19 Date d'inscription vendredi 13 février 2009 Statut Membre Dernière intervention 4 juin 2009 1
22 févr. 2009 à 15:28
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
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 841
22 févr. 2009 à 15:44
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
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 841
22 févr. 2009 à 14:10
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
sebjuve Messages postés 19 Date d'inscription vendredi 13 février 2009 Statut Membre Dernière intervention 4 juin 2009 1
22 févr. 2009 à 15:09
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 841
22 févr. 2009 à 15:24
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
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 841
22 févr. 2009 à 15:36
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
sebjuve Messages postés 19 Date d'inscription vendredi 13 février 2009 Statut Membre Dernière intervention 4 juin 2009 1
22 févr. 2009 à 15:39
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
sebjuve Messages postés 19 Date d'inscription vendredi 13 février 2009 Statut Membre Dernière intervention 4 juin 2009 1
22 févr. 2009 à 16:05
C'est une très bonne idée! Merci beaucoup pour ton aide.
0
sebjuve Messages postés 19 Date d'inscription vendredi 13 février 2009 Statut Membre Dernière intervention 4 juin 2009 1
22 févr. 2009 à 16:09
Merci beaucoup ça marche parfaitement. J'espère un jour te renvoyer l'ascenseur.
Merci bonne fin de week-end.
0