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
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
A voir également:
- Passage arguments script shell langage c
- Script vidéo youtube - Guide
- Langage ascii - Guide
- Classic shell windows 11 - Télécharger - Personnalisation
- Passage qwerty azerty - Guide
- Langage binaire - Guide
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
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.
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.
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
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 :
Par exemple :
char commande[150]; snprintf(commande,sizeof commande,"/bin/sh tonscript script %s %s %s",argv[1], argv[2], argv[3]); system(commande);
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
22 févr. 2009 à 14:10
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
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
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 ?
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
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
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 :
Dans ton fichier script, mets en première ligne :
#!/bin/sh(à adapter suivant le chemin à sh).
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
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.
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.
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
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?
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?
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
22 févr. 2009 à 16:05
C'est une très bonne idée! Merci beaucoup pour ton aide.
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
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.
Merci bonne fin de week-end.