Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 07/08/2007, 13h52   #1
Candidat au titre de Membre du Club
 
Inscription : février 2007
Messages : 39
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 39
Points : 10
Points : 10
Par défaut redirigé la sortie d'un script bash sur un programme C

Bonjour,

Je voudrais récupérer les messages d'erreur éventuel d'un script bash pour les traiter dans un programme c, le même programme qui lance le script.
Je vois assez facilement comment m'y prendre en passant par un fichier mais j'aimerais si possible éviter cette option.
Y'a un autre moyen et si oui lequel?

merci
onaipadesmickey est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/08/2007, 14h01   #2
LLB
Membre Expert
 
Inscription : mars 2002
Messages : 945
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 945
Points : 1 083
Points : 1 083
Avec Zsh, il suffit d'appeler :
Avec Bash ou sh, une solution, si tu n'as rien sur stdout :
Code :
./script.sh 2>&1 | a.out
Sinon, c'est un poil plus complexe :
Code :
1
2
3
$ exec 3>&1
$ ./script.sh 2>&1 >&3 | a.out
$ exec 3>&-
LLB est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/08/2007, 14h48   #3
Candidat au titre de Membre du Club
 
Inscription : février 2007
Messages : 39
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 39
Points : 10
Points : 10
euh pardonne moi mon ignorance mais je comprends pas trop
c quoi a.out
j'ai tenté la commande tel quel pour voir le résultat et j'ai eu le droit à un

bash: a.out: command not found
onaipadesmickey est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/08/2007, 14h59   #4
LLB
Membre Expert
 
Inscription : mars 2002
Messages : 945
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 945
Points : 1 083
Points : 1 083
Ben, c'est ton programme C... tu l'appelles comme tu veux.

En fait, je crois que j'avais mal compris la question. C'est bien ton programme C qui exécute le script ?
Dans ce cas, ce n'est pas une question de Shell, mais de C ou de système. Regarde du côté des fonctions fork, pipe, dup et dup2. Ces fonctions permettent de faire des redirections, comme le fait le Shell. A priori, fork et pipe te suffiront.
LLB est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/08/2007, 15h27   #5
Modérateur
 
Avatar de gangsoleil
 
R&D en systemes informatiques bas niveau Unix/Linux
Inscription : mai 2004
Messages : 5 497
Détails du profil
Informations personnelles :
Âge : 31
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : R&D en systemes informatiques bas niveau Unix/Linux

Informations forums :
Inscription : mai 2004
Messages : 5 497
Points : 9 677
Points : 9 677
Bonjour,

Si j'ai bien compris, tu lances un script dans un programme C (via par exemple l'utilisation des fonctions system ou encore exec), et tu souhaites connaître le code de retour de ce script ?

Si c'est bien ca, alors il est nécessaire de passer par un fichier : ces fonctions retournent leur propre code, mais pas celui du script qu'elles lancent.
__________________
Modérateur "C", "Informatique Générale & Hardware" et "Unix"
Les règles du forum
gangsoleil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/08/2007, 15h39   #6
LLB
Membre Expert
 
Inscription : mars 2002
Messages : 945
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 945
Points : 1 083
Points : 1 083
Ah non !

Code :
1
2
3
cat foo | while read line; do
  echo $line
done
Ce code là marche en Shell. Ce qui prouve bien que le Shell (while et read sont des builtins) peut récupérer la sortie standard de cat (qui est un binaire externe).

Donc, cf les fonctions fork, exec*, pipe, dup et dup2 comme je l'ai indiqué.

Si je me plante pas (à vérifier donc) : il faut faire : le pipe puis un fork. Dans le fils, dup2 puis exec. Dans le père, read et close.
LLB est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/08/2007, 18h13   #7
Candidat au titre de Membre du Club
 
Inscription : février 2007
Messages : 39
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 39
Points : 10
Points : 10
j'avais pas bien compris le fonctionnement des pipes sur stdin et stdout mais ca y est j'ai pigé et en effet ca convient tres bien dans mon cas...
merci
onaipadesmickey est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h48.


 
 
 
 
Partenaires

Hébergement Web