D'accord. Si je voulais rediriger la sortie d'un programme vers un fichier, je ferais quelque chose comme ça
prog > file
Si je voulais rediriger à la fois stdout et stderr vers ce fichier, je ferais
prog > file 2>&1
C'est très bien si vous voulez que la sortie aille dans le fichier. Mais que se passe-t-il si vous voulez que la sortie aille dans le fichier tout en restant dans stdout / stderr? Ainsi, la sortie est enregistrée dans le fichier, mais vous pouvez toujours la voir sur la console pendant l'exécution du programme. Y-a-t-il un moyen de faire ça? Et si oui, comment?
shell
io-redirection
Jonathan M Davis
la source
la source
stdout
est le descripteur de fichier 1, etfoo > some_file
signifie qu'un descripteur de fichier en écriture seule ouvert sursome_file
est la sortie standard de foo. stdout va toujours à stdout.Réponses:
tee
existe à cet effet; il prend un argument de nom de fichier et écrit les données qu'il lit de stdin dans stdout et dans le fichier:la source
prog |& tee file
.prog |& tee /dev/tty > file
, ce qui peut être utile au milieu d'un pipeline, par exemplefoo |& tee /dev/tty | sed 's/.*\r//' > foo.log
pour voir les mises à jour de progression de la ligne d'état sur votre terminal, mais les filtrer hors d'un fichier journal. Ou utilisez-le pour déboguer un pipeline que vous piratez ensemble en vous permettant de voir les données à ce stade.