Je ne sais pas quel est le meilleur ordre pour capturer les deux STDERR
et STDOUT
dans le même fichier à l'aide tee
. Je sais que si je veux diriger vers un fichier, je dois mapper le descripteur de fichier après la redirection, c'est-à-dire
find . >/tmp/output.txt 2>&1
Cela demande au shell d'envoyer STDOUT
à /tmp/output.txt
puis d'envoyer STDERR
à STDOUT
(qui envoie maintenant à /tmp/output.txt
).
Tenter d'effectuer l'opération 2>&1
avant de rediriger le fichier n'aura pas l'effet souhaité.
Cependant, lorsque je souhaite utiliser des tuyaux, tee
doit-il être:
find . |tee /tmp/output.txt 2>&1 # or
find . 2>&1 |tee /tmp/output.txt # ?
|&
est utilisé, l'erreur standard de command1 est connectée à l'entrée standard de command2 via le canal; c'est un raccourci pour2>&1 |
. Cette redirection implicite de l'erreur standard est effectuée après toutes les redirections spécifiées par la commande."stderr
etstdout
pour comprendre ce problème. Les opérateurs de redirection>
et de départ|
diffèrent lors de la tentative de capture des deux flux de sortie. Pour la redirection, je devais./testapp > /tmp/out.log 2>&1
. Alors que pour le tee je devais./testapp 2>&1 | tee /tmp/out.log
.|
est normalement appelé opérateur de tuyau.tee
fait uniquement référence au programme particulier qui est appelé à l'extrémité du tuyau.