$ 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