IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

redirigé la sortie d'un script bash sur un programme C


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Février 2007
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 39
    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

  2. #2
    LLB
    LLB est déconnecté
    Membre émérite
    Inscrit en
    Mars 2002
    Messages
    968
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 968
    Par défaut
    Avec Zsh, il suffit d'appeler :
    Avec Bash ou sh, une solution, si tu n'as rien sur stdout :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ./script.sh 2>&1 | a.out
    Sinon, c'est un poil plus complexe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ exec 3>&1
    $ ./script.sh 2>&1 >&3 | a.out
    $ exec 3>&-

  3. #3
    Membre averti
    Inscrit en
    Février 2007
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 39
    Par défaut
    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

  4. #4
    LLB
    LLB est déconnecté
    Membre émérite
    Inscrit en
    Mars 2002
    Messages
    968
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 968
    Par défaut
    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.

  5. #5
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Par défaut
    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.
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  6. #6
    LLB
    LLB est déconnecté
    Membre émérite
    Inscrit en
    Mars 2002
    Messages
    968
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 968
    Par défaut
    Ah non !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Redirection sortie standard pour script bash executé en crontab
    Par natha_poup dans le forum Shell et commandes GNU
    Réponses: 7
    Dernier message: 06/03/2014, 13h03
  2. Réponses: 2
    Dernier message: 28/07/2010, 10h05
  3. appel de script bash dans un programme en C
    Par mackla dans le forum Linux
    Réponses: 1
    Dernier message: 26/02/2008, 21h08
  4. Réponses: 11
    Dernier message: 20/09/2007, 16h58
  5. Réponses: 2
    Dernier message: 02/06/2007, 11h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo