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

Linux Discussion :

[shell script][debutant] Rediriger la sortie vers l'ecran et dans un fichier / pipe


Sujet :

Linux

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2006
    Messages : 127
    Points : 64
    Points
    64
    Par défaut [shell script][debutant] Rediriger la sortie vers l'ecran et dans un fichier / pipe
    Bonjour,

    Comme le titre du sujet l'indique, je m'amuse un peu avec les redirections et je voudrais rediriger la sortie d'une commande dans un pipe et qu'elle soit en meme temps ecrite a l'ecran.

    La solution de rediriger dans le fichier puis d'afficher le fichier ne m'interesse pas, je veux en fait surveiller l'avancement de la commande pendant son execution.

    Si vous avez une idee pour m'aider,
    Merci.

  2. #2
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    Une sortie est redirigee ou non, pas les deux en meme temps. Tu peux rediriger stdout et stderr independamment et envoyer le meme message sur les deux sorties, mais comme stderr est d'habitude reservee aux messages d'erreur, ce n'est pas tres propre.
    Afficher le fichier de redirection (ou sa derniere ligne uniquement) au fur et a mesure me semble une assez bonne solution.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2006
    Messages : 127
    Points : 64
    Points
    64
    Par défaut
    Je veux bien tenter d'afficher les lignes du fichier ligne par ligne mais je ne vois pas vraiment comment le faire pendant l'execution de mon programme.

    Pour moi les commandes du shell script s'executent les unes apres les autres, donc je ne peux avoir acces au fichier que lorsque mon programme a fini son execution. Et ce n'est pas ce que je voudrais...

  4. #4
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    man tee
    (et man tty)

    --
    Jedaï

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2006
    Messages : 127
    Points : 64
    Points
    64
    Par défaut
    Citation Envoyé par Jedai Voir le message
    man tee


    --
    Jedaï
    Bien je viens de tester et le resultat s'affiche a l'ecran a la fin de l'execution de mon programme...
    Je l'utilise ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ./monprog | tee monfichier.txt
    Satus quo donc.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2006
    Messages : 127
    Points : 64
    Points
    64
    Par défaut
    Je ne vois pas non plus en quoi tty pourrait m'aider dans mon cas.

  7. #7
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    Citation Envoyé par levit Voir le message
    Je ne vois pas non plus en quoi tty pourrait m'aider dans mon cas.
    Je pense que Jedai propose quelque-chose comme ca (vers la fin de la page). C'est malin.

  8. #8
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "hello world" | tee /dev/tty | sed 's/hello/bye/' >file
    tee sert à multiplexer la sortie, après c'est à toi de t'arranger pour qu'elles arrivent où tu veux.

    --
    Jedaï

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2006
    Messages : 127
    Points : 64
    Points
    64
    Par défaut
    Citation Envoyé par Jedai Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "hello world" | tee /dev/tty | sed 's/hello/bye/' >file
    tee sert à multiplexer la sortie, après c'est à toi de t'arranger pour qu'elles arrivent où tu veux.

    --
    Jedaï
    J'ai bien compris comment fonctionne tee.
    Mais mon probleme est le suivant : mettons que mon programme mette 5 minutes a s'executer et qu'a toutes les minutes il ecrit (sur la sortie standard) 'X minute(s) ecoulee(s)'.

    Si je fais
    ./monprog
    sur l'ecran je vois :
    au bout d'1 min : '1 minute(s) ecoulee(s)'.
    au bout de 2 min : '2 minute(s) ecoulee(s)'.
    au bout de 3 min : '3 minute(s) ecoulee(s)'.
    au bout de 4 min : '4 minute(s) ecoulee(s)'.
    au bout de 5 min : '5 minute(s) ecoulee(s)'.

    Or si je fais
    ./monprog | tee monfichier.txt
    je n'aurai pas d'affichage toutes les minutes a l'ecran meme si au bout de 5 min ces 5 lignes apparaissent d'un coup. J'obtiens :
    au bout de 5 min : '1 minute(s) ecoulee(s)'.
    au bout de 5 min : '2 minute(s) ecoulee(s)'.
    au bout de 5 min : '3 minute(s) ecoulee(s)'.
    au bout de 5 min : '4 minute(s) ecoulee(s)'.
    au bout de 5 min : '5 minute(s) ecoulee(s)'.

    Voila mon souci, je veux avoir mon affichage toutes les minutes tout en gardant la redirection dans un pipe.

  10. #10
    LLB
    LLB est déconnecté
    Membre expérimenté
    Inscrit en
    Mars 2002
    Messages
    967
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 967
    Points : 1 410
    Points
    1 410
    Par défaut
    Il semblerait qu'un programme bufferise la sortie. À quoi ressemble "monprog" ? (certains binaires bufferisent quand la sortie n'est pas un tty) Par exemple, s'il utilise sed, essaie avec l'option -u.

    J'ai testé avec ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #! /bin/sh
     
    for i in 1 2 3 4 5; do
        echo $i
        sleep 1
    done
    Affiche bien la sortie au fur et à mesure. Donc, tee ne bufferise pas (enfin, juste ligne par ligne).

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2006
    Messages : 127
    Points : 64
    Points
    64
    Par défaut
    Il s'agit d'un programme en C.

  12. #12
    LLB
    LLB est déconnecté
    Membre expérimenté
    Inscrit en
    Mars 2002
    Messages
    967
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 967
    Points : 1 410
    Points
    1 410
    Par défaut
    Et c'est toi qui as écrit ce programme ?
    Le programme affiche bien des "\n" régulièrement ?

    Si tu fais "./monprog | cat", affiche-t-il les lignes au fur et à mesure ?

Discussions similaires

  1. [1.x] Rediriger la sortie vers un fichier
    Par cmasset dans le forum Symfony
    Réponses: 7
    Dernier message: 28/07/2009, 13h13
  2. Réponses: 3
    Dernier message: 08/06/2009, 16h45
  3. Rediriger une sortie vers un fichier texte
    Par nuitn0ire dans le forum Débuter
    Réponses: 3
    Dernier message: 29/02/2008, 21h50
  4. Réponses: 7
    Dernier message: 20/09/2007, 11h21
  5. Comment rediriger la sortie vers /dev/null
    Par dclink dans le forum C
    Réponses: 4
    Dernier message: 24/06/2003, 18h23

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