Retourner aux forums || Retourner au forum Astuces.divers

Astuces.divers : [Terminal] Du bon ordre des redirections

Posté par Gaétan RYCKEBOER (page perso, ) le 05 mars 2002
0
Les sorties stdin et stdout sont des pointeurs. Si vous voulez mettre stdin et stdout vers /dev/null : macommande > /dev/null 2>&1 Dans l'autre sens, stderr sortira sur la console. idem, stderr et stdout vers un pipe : macommande | commande2 2>&1 L'inverse ne fonctionnera pas.

> Lire le message (8 commentaires, moyenne: 1).  

Cette discussion est archivée, il n'est plus possible de laisser des commentaires.

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

bash | tcsh/csh

Posté par dvrasp (page perso, ) le 29/07/2002 à 18:35. (lien). Évalué à 1.

Il s'agit ici de bash.
Avec tcsh ou csh, il n'est pas possible - à ce que je sais - de rediriger séparément les deux canaux de sortie. On peut par contre les joindre de cette manière :

shutup >& /dev/null 
ou
cmd1 |& cmd2

Pipe -> erreur ?

Posté par Florent Rougon (page perso, ) le 01/08/2002 à 12:21. (lien). Évalué à 1.

Euh, soit je suis mal réveillé, soit je ne comprends pas ce que le Monsieur veut faire, soit l'exemple du pipe est faux.

En tout cas, je ferais comme ça :

sh % sh -c "echo aa && echo bb 1>&2" 2>&1 | cat >res

puis :

sh % cat res
aa
bb

Mon cat a donc bien récupéré sur son entrée standard le aa envoyé sur stdout par le sh -c ainsi que le bb envoyé sur stderr par ce même sh.

  • [^]Re: Pipe -> erreur ?

    Posté par harbort () le 07/01/2003 à 07:01. (lien). Évalué à 1.

    En fait, je crois qu'il a mal compris comment ça marche !
    En effet, la commande "&n" permet de pointer vers le même fichier que le fichier de sortie de descripteur n sachant que 1 c'est stdout et 2 c'est stderr.
    Maintenant "n>" permet de rediriger le fichier vers lequel pointe de le fichier de descripteur n.

    Ainsi, on peut même compliquer un peu les choses et écrire des choses du genre :
    sh -c "echo aa & echo bb >&2" 3>res 1>&3 2>&3

    Ce qui affecte le descripteur 3 au fichier res puis redirige les sorties 1 et 2 vers le même fichier que 3.

    En fait donc, sa commande avec pipe ne marche pas car il redirige la sortie stderr de la seconde commande alors qu'il faut rediriger celle de la première ! En effet, si on veux que le pipe envoie tout, comme il n'envoie que stdout il faut rediriger stderr AVANT le pipe !

    A noter qu'il existe, avec bash au moins, un raccourcis pour rediriger les deux sorties standard stdout et stderr vers un fichier :
    macommande &> fichier

    • [^]Re: Pipe -> erreur ?

      Posté par Teuxe (page perso, ) le 02/08/2003 à 22:39. (lien). Évalué à 1.

      On peut en effet créer plein de flux différents : 3, 4, 5, 6... jusqu'à 1023 sur mon bash ;-)
      Après, à vous de trouver l'intérêt d'en avoir autant...

      • [^]Re: Pipe -> erreur ?

        Posté par Philippe Fremy (page perso, ) le 06/11/2003 à 11:25. (lien). Évalué à 1.

        Edit un script configure et tu verras, apparemment, ils aiment bien jouer avec. Je crois qu'ils en ont jusqu'a 6. cool hein ?

Re: Du bon ordre des redirections

Posté par Teuxe (page perso, ) le 02/08/2003 à 22:29. (lien). Évalué à 1.

On aura bien sûr lu :

Si vous voulez mettre stdout et stderr vers /dev/null :
macommande > /dev/null 2>&1

Dans l'autre sens,
macommande 2>&1 >/dev/null
explications plus claires : on redirige le flux d'erreur vers la sortie standard tandis que le flux de sortie "normal" du programme est envoyé vers /dev/null (on "croise" les flux). Eh oui l'ordre des redirections est important.

stdout ---.  .--- console
              X
stderr  ---'  `-----------> /dev/null

(waouh, de l'ascii-art -- si ça se trouve, il passe mal chez vous, désolé)

Enfin, stdin (puisqu'on en parle) est désigné par <. On ne peut évidemment pas adresser ce flux : qui enverrait sa sortie sur sa propre entrée ? (quoique quelque part ca pourrait ressembler à de la récurrence... ;-) Non, si c'était possible, je ne vous raconte pas le bazar...

Les développeurs C noteront la similitude entre &var et &flux... d'où la désignation de "pointeur".

Je ne considère pas ça comme une astuce : les flux sont une base dans l'utilisation d'Unix quand même. Lire, écrire dans un fichier, rediriger à travers un pipe, etc. font partie de l'essentiel du fonctionnement d'Unix, donc de Linux...

Plus rapide ...

Posté par tchibitchi () le 10/03/2005 à 18:24. (lien). Évalué à 1.

... macommande &> /dev/null
enverra l'ensemble des sorties vers /dev/null.

Mes 2 cents

Y a quelqu'un

Posté par techdexploit () le 27/12/2006 à 09:35. (lien). Évalué à 1.

Bonjour

Je suis nouveau sur ce site et malgré vos commentaire je ne saisit toujours pas l'interet de " 2>&1 " cela veut-il dire de rediriger l'erreur vers la sortie standart? Excusez mon ignorance en tant que tech d'exsploit je fais tout en ligne de commande et je me familiarise seulement maintenant avec le shell.
En attendant de recevoir peut etre une reponse je vais regarder vos commentaires de plus pres...

Revenir en haut de page || Retourner aux forums || Retourner au forum Astuces.divers