$ program [arguments...] 2>&1 | tee outfile
2>&1
vide les flux stderr et stdout.
tee outfile
prend le flux qu'il obtient et l'écrit à l'écran et dans le fichier "outfile".
C'est probablement ce que la plupart des gens recherchent. La situation probable est qu'un programme ou un script travaille dur pendant longtemps et produit beaucoup de résultats. L'utilisateur souhaite vérifier régulièrement sa progression, mais souhaite également que la sortie soit écrite dans un fichier.
Le problème (en particulier lors du mélange des flux stdout et stderr) est qu'il y a une dépendance à l'égard des flux qui sont vidés par le programme. Si, par exemple, toutes les écritures sur stdout ne sont pas vidées, mais toutes les écritures sur stderr sont vidées, elles finiront par ordre chronologique dans le fichier de sortie et à l'écran.
C'est également mauvais si le programme ne produit que 1 ou 2 lignes toutes les quelques minutes pour signaler la progression. Dans un tel cas, si la sortie n'était pas purgée par le programme, l'utilisateur ne verrait même aucune sortie à l'écran pendant des heures, car aucune ne serait poussée à travers le tuyau pendant des heures.
Mise à jour: le programme unbuffer
, qui fait partie du expect
package, résoudra le problème de mise en mémoire tampon. Cela entraînera stdout et stderr à écrire sur l'écran et le fichier immédiatement et à les garder synchronisés lorsqu'ils sont combinés et redirigés vers tee
. Par exemple:
$ unbuffer program [arguments...] 2>&1 | tee outfile