Passage arguments script shell langage c
sebjuve
Messages postés
19
Date d'inscription
Statut
Membre
Dernière intervention
-
sebjuve Messages postés 19 Date d'inscription Statut Membre Dernière intervention -
sebjuve Messages postés 19 Date d'inscription Statut Membre Dernière intervention -
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.
A voir également:
- Passage arguments script shell langage c
- Langage ascii - Guide
- Classic shell - Télécharger - Personnalisation
- Script vidéo youtube - Guide
- Passage qwerty azerty - Guide
- Langage binaire - Guide
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.
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 :
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 :
Cdlt
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 ?
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 :
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.
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?
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?