1649 votes

Comment faire pour rediriger la sortie vers un fichier et stdout

En bash, en appelant foo d'affichage, toute sortie de la commande sur la sortie standard (stdout).

Appelant foo > output permettrait de rediriger toute sortie de la commande vers le fichier spécifié (dans ce cas, "production").

Est-il possible de rediriger la sortie vers un fichier et d'afficher sur la sortie standard stdout?

2337voto

Zoredache Points 8873

La commande que vous voulez est nommé tee

ls -lR / | tee output.file

584voto

Matthew Alpert Points 958
$ program [arguments...] 2>&1 | tee outfile

2>&1 vide le stderr et stdout ruisseaux. tee outfile prend le flux qu'il reçoit et de l'écrit à l'écran et dans le fichier "outfile".

C'est probablement ce que la plupart des gens sont à la recherche pour. La situation probable est un programme ou un script est de travailler dur pendant une longue période et la production d'un lot de production. L'utilisateur veut vérifier périodiquement le progrès, mais veut également la sortie écrites dans un fichier.

Le problème (surtout quand le mélange stdout et stderr cours d'eau), c'est qu'il s'appuie sur les flux rejetés par le programme. Si, par exemple, toutes les écrit sur la sortie standard stdout sont pas vidées, mais toutes les écritures sur stderr sont vidées, puis ils vont finir par sortir de l'ordre chronologique dans le fichier de sortie et sur l'écran.

C'est aussi mauvais si le programme ne les sorties 1 ou 2 lignes, toutes les quelques minutes pour rendre compte des progrès. Dans un tel cas, si la sortie n'a pas été rincé par le programme, l'utilisateur ne voit même pas de sortie sur l'écran pendant des heures, parce que rien de cela n'aurait poussés à travers le tuyau pendant des heures.

Mise à jour: Le programme unbuffer, une partie de l' expect colis, permettra de résoudre le problème de mise en mémoire tampon. Ce sera la cause de stdout et stderr pour écrire à l'écran et le fichier immédiatement et de les garder synchronisés lorsque combiné et redirigé vers tee. E. g.:

$ unbuffer program [arguments...] 2>&1 | tee outfile

31voto

Thomas Points 63635

tee est votre ami.

whatever | tee logfile.txt

10voto

Chuck Phillips Points 276

'tail-f output' devrait fonctionner.

-17voto

kal Points 5324

tee est parfait pour cela, mais cela va aussi faire le travail

ls -lr / > output | cat output

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X