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 :

Redirection de sortie


Sujet :

Linux

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 43
    Points : 28
    Points
    28
    Par défaut Redirection de sortie
    Bonjour,

    J'ai un script, je le lance et je veux:

    -mettre stderr dans un fichier1
    -mettre stdout+stderr dans fichier2 (stdout et stderr seront entrelacés, c'est à dire que je ne veux pas tout le stdout puis tout le stderr, je veux que ça apparaisse dans l'ordre comme si j'avais fait simplement 2>&1)

    Voilà alors comment créer mon fichier1 et fichier2 lors du lancement de mon script?

    La commande tee doit sans doute être utiliser mais je vois pas comment agencer les pipes, tee et les redirections pour obtenir ce que je veux

    Avez-vous une idée svp?

  2. #2
    Membre confirmé
    Avatar de bster
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    372
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2005
    Messages : 372
    Points : 497
    Points
    497
    Par défaut
    script 1> fichier.log 2> erreurs.log
    Comité de lutte contre le langage SMS sur les forums
    Veuillez écrire dans un langage compréhensible par les humains, merci.

  3. #3
    Membre chevronné

    Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 296
    Points : 1 803
    Points
    1 803
    Par défaut
    le problème de tee c'est qu'il ne travaille que avec la sortie standard pas la sortie des erreurs ! pas de solution qui me vient à l'esprit
    Marc
    Slackware for ever ......
    BASH - KSH ( http://marcg.developpez.com/ksh/ )

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 43
    Points : 28
    Points
    28
    Par défaut
    Citation Envoyé par bster
    script 1> fichier.log 2> erreurs.log
    pas tout à fait ce que je veux, dans fichier.log je n'ai que la sortie stdout moi je veux stdout et stderr dans fichier.log

  5. #5
    Expert confirmé
    Avatar de Katyucha
    Femme Profil pro
    DevUxSecScrumOps Full Stack Bullshit
    Inscrit en
    Mars 2004
    Messages
    3 287
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Irlande

    Informations professionnelles :
    Activité : DevUxSecScrumOps Full Stack Bullshit

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 287
    Points : 5 075
    Points
    5 075
    Par défaut
    Pour donner un exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Blablabla
    Warning : probleme truc
    Blablabla
    Error : banane
    Blablabla = des stdout
    Error et Warning = des stderr

    Les deux entrelacés...

    Franchement, aucune idée. Je me suis jamais posé la question..
    Grave urgent !!!

  6. #6
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Points : 4 029
    Points
    4 029
    Par défaut
    je crois que bster donne un élément de réponse.

    je pense qu'en travaillant avec 2 fichiers temporaires contenant respectivement stderr et stdout, ça doit être possible.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    #!/bin/sh
     
    mafonction()
    {
    cmd=$1
    echo $cmd | tee -a stderr.fic | tee -a stdoutETstderr.fic
    $cmd 2>stderr.tmp 1>stdout.tmp
     
    cat stderr.tmp >> stderr.fic
    cat stderr.tmp >> stdoutETstderr.fic
    cat stdout.tmp >> stdoutETstderr.fic
     
    }
     
    echo > stdoutETstderr.fic
    echo > stderr.fic
     
    mafonction "azeg adz"
     
    mafonction "ls -l"
    Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux

  7. #7
    Membre chevronné

    Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 296
    Points : 1 803
    Points
    1 803
    Par défaut
    dans l'exemple de ggnore les sortie err et standart seront à la suite et pas "dans l'ordre"
    Marc
    Slackware for ever ......
    BASH - KSH ( http://marcg.developpez.com/ksh/ )

  8. #8
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Points : 4 029
    Points
    4 029
    Par défaut
    Citation Envoyé par MarcG
    dans l'exemple de ggnore les sortie err et standart seront à la suite et pas "dans l'ordre"
    Euuhhh, non, je vois pas le problème.
    stderr et sdout sont entrelacés correctement ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ ./test.sh
    azeg adz
    ls -l

    Citation Envoyé par stderr.fic
    azeg adz
    ./test.sh: line 7: azeg: command not found
    ls -l
    Citation Envoyé par stdoutETstderr.fic
    azeg adz
    ./test.sh: line 7: azeg: command not found
    ls -l
    total 12
    -rw-r--r-- 1 etienne etienne 59 2005-12-09 10:37 stderr.fic
    -rw-r--r-- 1 etienne etienne 0 2005-12-09 10:37 stderr.tmp
    -rw-r--r-- 1 etienne etienne 59 2005-12-09 10:37 stdoutETstderr.fic
    -rw-r--r-- 1 etienne etienne 0 2005-12-09 10:37 stdout.tmp
    -rwxr-xr-x 1 etienne etienne 319 2005-12-09 10:22 test.sh
    Edit:
    Ok je viens de comprendre.
    C'est effectivement faux mon bidule

    Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux

  9. #9
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Si l'on veut stderr avant stdout, il y a aussi la solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ./sorties.sh 2> log.errETout | tee log.out >> log.errETout
    qui ajoute au log de stderr la sortie standard de tee.

    Ceci dit, nous n'avons toujours pas d'entrelacement.

    J'ai creusé un peu du côté de PERL, aussi, et ce n'est pas jouable non plus
    La FAQ Perl est par ici
    : La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !

  10. #10
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Points : 4 029
    Points
    4 029
    Par défaut
    Peut être en utilisant ceci :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    etienne@info1:~/shelltest/backup $ touch aze
    etienne@info1:~/shelltest/backup $ tail -f aze >> aze2 &
    [1] 31006
    etienne@info1:~/shelltest/backup $ echo "adfzre" > aze
    etienne@info1:~/shelltest/backup $ cat aze2
    adfzre
    C'est un peu balourd, mais ça assure une synchro constante des fichiers et donc rend peut être possible l'entrelacement.
    Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 43
    Points : 28
    Points
    28
    Par défaut
    et donc ca ferait quelque chose du style:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ./script.sh > out+err 2> err "et fait en meme temps" tail -f err >> out+err
    et le "et fait en même temps " se traduit par quoi? un pipe c'est pas bon, un ";" non plus..

  12. #12
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Points : 4 029
    Points
    4 029
    Par défaut
    Citation Envoyé par Danae
    et donc ca ferait quelque chose du style:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ./script.sh > out+err 2> err "et fait en meme temps" tail -f err >> out+err
    et le "et fait en même temps " se traduit par quoi? un pipe c'est pas bon, un ";" non plus..
    j'aurai fait ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    etienne@info1:~/shelltest/std $ tail -f err >> out+err &
    [1] 32456
    etienne@info1:~/shelltest/std $ ./test.sh 1>out+err 2>err
    mais out+err n'est pas comme il devrait.

    Désolé pour la fausse piste
    Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux

  13. #13
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ./script.sh > out_err 2> err & tail -f err >> out_err
    Présente l'inconvénient de devoir être tué à la main (ctrl+c) et de ne pas préserver l'entrelacement
    La FAQ Perl est par ici
    : La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !

  14. #14
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Points : 4 029
    Points
    4 029
    Par défaut
    Voici la solution d'un pote à moi.
    ça a l'air pas trop mal.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ((./test.sh | tee stdout.txt) 2>&1 | tee stderr.txt) && diff -s stdout.txt stderr.txt > Log_Error.txt
    Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux

  15. #15
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Citation Envoyé par ggnore
    Voici la solution d'un pote à moi.
    ça a l'air pas trop mal.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ((./test.sh | tee stdout.txt) 2>&1 | tee stderr.txt) && diff -s stdout.txt stderr.txt > Log_Error.txt
    Chez moi, l'entrelacement n'y est toujours pas
    La FAQ Perl est par ici
    : La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !

  16. #16
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Points : 4 029
    Points
    4 029
    Par défaut
    Citation Envoyé par 2Eurocents
    Citation Envoyé par ggnore
    Voici la solution d'un pote à moi.
    ça a l'air pas trop mal.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ((./test.sh | tee stdout.txt) 2>&1 | tee stderr.txt) && diff -s stdout.txt stderr.txt > Log_Error.txt
    Chez moi, l'entrelacement n'y est toujours pas
    Tu as tout à fait raison, mon test.sh n'était pas assez vilain.
    Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux

  17. #17
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Points : 4 029
    Points
    4 029
    Par défaut
    En même temps quand je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ls -l azeoiu test.sh aefzef
    j'obtiens :

    ls: azeoiu: Aucun fichier ou répertoire de ce type
    ls: aefzef: Aucun fichier ou répertoire de ce type
    -rwxr-xr-x 1 etienne etienne 29 2005-12-09 15:19 test.sh
    Et ça n'est pas non plus dans le bon ordre.

    Ce problème me paraît assez délicat à traiter.
    Que contient ton test.sh 2eurocents ?
    Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux

  18. #18
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Voici le "test.sh" que j'utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #!/bin/bash
     
    echo "Toto sur stdout"
    echo "Titi sur stdout"
    echo "Tata sur stderr" >&2
    echo "Tata sur stdout"
    echo "Toto sur stderr" >&2
    echo "Titi sur stderr" >&2
    Il n'est pas bien méchant, mais il ne laisse rien passer
    La FAQ Perl est par ici
    : La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !

  19. #19
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 43
    Points : 28
    Points
    28
    Par défaut
    Bon ben avec tout les postes et la consommation de neuronnes que vous avez dû faire je crois que ce que je demande est impossible, je vais m'y prendre autrement tanpis....
    En tout cas un grand merci à vous tous

    A bientôt
    merci encore

  20. #20
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Points : 4 029
    Points
    4 029
    Par défaut
    Citation Envoyé par Danae
    Bon ben avec tout les postes et la consommation de neuronnes que vous avez dû faire je crois que ce que je demande est impossible, je vais m'y prendre autrement tant pis....
    En tout cas un grand merci à vous tous

    A bientôt
    merci encore
    Je pense que c'est possible, y a pas de raison.

    Il doit falloir faire des opérations bizarres sur les descripteurs de fichiers et puis les ouvrir de façon louche.

    Ou alors un truc tout bête auquel personne n'a pensé.

    En tous les cas, je sèche
    Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux

Discussions similaires

  1. Redirection des sorties EXP sous Unix
    Par Alain B. dans le forum Import/Export
    Réponses: 3
    Dernier message: 11/02/2008, 13h57
  2. Exécuter un script, redirection entrée-sortie
    Par darkrio dans le forum Langage
    Réponses: 9
    Dernier message: 30/03/2007, 14h53
  3. redirection entrée/sortie sous windows en C
    Par alexlecool dans le forum C
    Réponses: 3
    Dernier message: 08/12/2006, 09h05
  4. redirection de sortie
    Par youp_db dans le forum Windows
    Réponses: 7
    Dernier message: 01/09/2006, 11h47
  5. redirection entrée sortie
    Par ludovik dans le forum Réseau
    Réponses: 4
    Dernier message: 20/06/2006, 20h28

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