Forum Linux.redhat Probleme avec les redirection <<les pipe>>

Posté par  .
Étiquettes : aucune
0
14
oct.
2007
Bonjour,

J'aimerais avoir vos conseils sur un ptit probleme.

Voila j'aimerais regirigé la sortie d'une commande vers un fichier texte.
Comme ./commande -argument > aa.txt

Mais dans le cas ici ça fonctionne pas

Voici ma commande:

mysql -uroot -pmotdepasse root_base < /home/alex/dump.sql



J'ai essayer de rajouté > aa.txt a la fin mais il reste vide et le message d'erreur s'affiche quand meme a l'écran


J'ai meme essayer | tee aa.txt


J'aimerais avoir dans le fichier texte autant les erreurs retourné par mysql que ceux retourné par bash si /home/alex/dump.sql existe pas....


Merci de votre aide.
  • # stderr != stdout

    Posté par  . Évalué à 6.

    Comme tu l'as dit, il s'agit d'un message d'erreur.

    Or sous UNIX, on distingue la sortie standard (stdout) de la sortie des erreurs (stderr).

    Lorsque tu fais une redirection de la sortie, tu rediriges uniquement stdout.
    Si tu veux rediriger stderr :
    ./programme 1>log_stdout 2>log_stderr

    Plus de détails :
    http://abs.traduc.org/abs-5.0-fr/ch19.html
    • [^] # Re: stderr != stdout

      Posté par  . Évalué à 1.

      Pour rediriger les erreurs c'est >&
      Donc ça donnerait :

      ./programme >& log_stderr

      Mais la réponse du dessus marche aussi... Je la trouve même plus logique.
      • [^] # Re: stderr != stdout

        Posté par  . Évalué à 5.

        Pour rediriger les erreurs c'est >&
        Donc ça donnerait :
        ./programme >& log_stderr


        Faux, comme on peut le vérifier via le lien indiqué, & tout seul correspond à stdout ET stderr, pas seulement stderr.
  • # Voir gestion des flux

    Posté par  . Évalué à 2.

    Lis bien les commentaires ci-dessus. Ensuite, si tu veux tout enregistrer dans le même fichier :

    $ commande 2>&1 > log.txt

    Et hop, tu rediriges le canal numéro 2 (stderr) vers le 1 (stdout), puis tu loggues normalement la sortie standard.

    Note que les trux flux standards 0-stdin, 1-stdout et 2-stderr sont bien sûr définis en shell, mais que bash t'autorise à manipuler autant de descripteurs que tu le souhaites à la fois. Pour plus d'infos :

    $ man bash
    Section REDIRECTION.

    Kilométrique, mais très instructif.
    • [^] # Re: Voir gestion des flux

      Posté par  . Évalué à 2.


      $ commande 2>&1 > log.txt


      Cela ne marchera pas car la redirection est fait dans le mauvais ordre et seul stdout sera redirigé vers log.txt. Il faut faire

      $ command > log.txt 2>&1


      Etienne
      • [^] # Re: Voir gestion des flux

        Posté par  . Évalué à 1.

        Commentaire inutile, mais il y a plus court :

        $ command &> log.txt


        Évidement, ça redirige tout (stdout et stderr) vers log.txt, mais comme tout bon informaticien digne de ce nom, je suis feignant, et donc, je pensais utile d'apporter cette précision, car ça fait moins de caractères à frapper (aïe).

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.