Bueno. Si quisiera redirigir la salida de un programa a un archivo, haría algo como esto
prog > file
Si quisiera redirigir stdout y stderr a ese archivo, entonces lo haría
prog > file 2>&1
Esto está muy bien si quieres que la salida vaya al archivo. Pero, ¿qué sucede si desea que la salida vaya al archivo y aún así ir a stdout / stderr? Por lo tanto, la salida se guarda en el archivo, pero aún se puede ver en la consola mientras se ejecuta el programa. ¿Hay una manera de hacerlo? Y si es así, ¿cómo?
shell
io-redirection
Jonathan M Davis
fuente
fuente
stdout
es el descriptor de archivo 1, yfoo > some_file
significa que un descriptor de archivo de solo escritura abierto ensome_file
sto es foo. stdout siempre va a stdout.Respuestas:
tee
existe para este propósito; toma un argumento de nombre de archivo y escribe los datos que lee de stdin tanto en stdout como en el archivo:fuente
prog |& tee file
.prog |& tee /dev/tty > file
, lo que puede ser útil en medio de una tubería, por ejemplo,foo |& tee /dev/tty | sed 's/.*\r//' > foo.log
para ver las actualizaciones de progreso de la línea de estado en su terminal, pero filtrarlas de un archivo de registro. O úselo para depurar una tubería que está pirateando al permitirle ver los datos en ese punto.