Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

piper sdterr

3 réponses
Avatar
Manuel Pégourié-Gonnard
Bonjour,

Comment fait-on pour "piper" la sortie d'erreur d'un processus vers un
autre processus ? Par exemple, j'aimerais éxécuter un script de façon à
ce que ses sorties standard et d'erreur soient bien affichées dans le
terminal comme d'habitude, mais en plus écrites respectivement dans
script.log et script.err.

Pour la sortie standard, je sais le faire avec

./script | tee script.log

et je ne trouve pas comment envoyer la sortie d'erreur du script vers
l'entrée d'un deuxième tee.

Merci d'avance pour vos réponses, et/ou un pointeur précis vers une bonne
doc (google fournit plein de tutoriaux sur les redirections, mais pour
passer du niveau tutoriel au niveau au-dessus, c'est plus dur).

--
Manuel Pégourié-Gonnard Institut de mathématiques de Jussieu
http://weblog.elzevir.fr/ http://people.math.jussieu.fr/~mpg/

3 réponses

Avatar
Nicolas George
Manuel Pégourié-Gonnard wrote in message
:
./script | tee script.log



./script 2>&1 | tee script.log

Pour comprendre les redirections un peu complexes, il faut savoir deux
choses : elles sont faites dans l'ordre où elles apparaissent dans la ligne
de commande, un pipe correspond à une redirection faite sur 1 en tout
premier.
Avatar
Damien Wyart
* Manuel Pégourié-Gonnard <mpg+ in fr.comp.os.unix:
Comment fait-on pour "piper" la sortie d'erreur d'un processus vers un
autre processus ? Par exemple, j'aimerais éxécuter un script de façon à
ce que ses sorties standard et d'erreur soient bien affichées dans le
terminal comme d'habitude, mais en plus écrites respectivement dans
script.log et script.err.



(./script 2>&1 1>&3 | tee errors.log) 3>&1 1>&2 | tee output.log

Je n'ai pas de bon pointeur Internet sous la main ; normalement une
lecture des pages man bash et zsh devrait t'éclairer un peu mais c'est
vrai que ça n'est pas simple au début...

--
DW
Avatar
Manuel Pégourié-Gonnard
Bonjour Damien,

Damien Wyart scripsit:

* Manuel Pégourié-Gonnard <mpg+ in fr.comp.os.unix:
Comment fait-on pour "piper" la sortie d'erreur d'un processus vers un
autre processus ? Par exemple, j'aimerais éxécuter un script de façon à
ce que ses sorties standard et d'erreur soient bien affichées dans le
terminal comme d'habitude, mais en plus écrites respectivement dans
script.log et script.err.



(./script 2>&1 1>&3 | tee errors.log) 3>&1 1>&2 | tee output.log



Exactement ce que je voulais. Merci beaucoup.

Je n'ai pas de bon pointeur Internet sous la main ; normalement une
lecture des pages man bash et zsh devrait t'éclairer un peu mais c'est
vrai que ça n'est pas simple au début...



Je viens de lire la partie « redirections » de man zshall, j'y ai
découvert plein d'opérateurs de redirection et d'options, mais ce sui me
manque souvent en pratique, c'est de savoir comment les utiliser dans le
bon ordre (par exemple, penser à un sous-shell comme ci-dessus).
J'imagine que ça vient avec la pratique et en lisant des exemples.

--
Manuel Pégourié-Gonnard Institut de mathématiques de Jussieu
http://weblog.elzevir.fr/ http://people.math.jussieu.fr/~mpg/