Passage arguments script shell langage c
sebjuve
Messages postés
21
Statut
Membre
-
sebjuve Messages postés 21 Statut Membre -
sebjuve Messages postés 21 Statut Membre -
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.
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
-
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. -
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);
-
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 -
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 ? -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
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). -
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. -
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? -
-
Merci beaucoup ça marche parfaitement. J'espère un jour te renvoyer l'ascenseur.
Merci bonne fin de week-end.