Linux: Salida a pantalla y a fichero, Comando Tee

En muchas ocasiones necesitamos que la salida de un comando se haga al mismo tiempo a un fichero y que aparezca por pantalla. Desde hace un par de años conozco la existencia del comando tee (no confundir con el comando Gee), que te permite hacer exactamente eso, pero recuerdo una época en que busqué inutilmente como hacerlo y no había manera. Al final encontré suficiente información en inglés pero poca en castellano. La sintaxis es la siguiente:
User@Localhost$ comando_a_ejecutar | tee fichero
Así que si ejecutamos la orden ‘cat fichero1 | tee fichero2′ estaríamos a la vez mostrando el fichero por pantalla y copiando el contenido a otro archivo… pero hay un problema: Si ejecutamos la orden de esta manera enciertas circunstancias perderemos los mensajes de error, así que para un resultado completo cambiaremos un poco la sintaxis:
User@Localhost$ comando_a_ejecutar 2>&1 | tee fichero
Recordemos que en Unix/Linux 0 = stdin, 1 = stdout y 2 = stderr, así que 2>&1 hace que los errores se muestren también por la salida estandar, que es la que luego estamos separando como si de una T de una tubería se tratase, de forma que los datos van a dos lugares diferentes.
Ahora que hemos llegado hasta aquí, quizás se nos plantee otro problemilla. Al ejecutar la orden, si el fichero de destino contenía algo, lo perderemos, y quizás nos interesa más “añadir al final” la salida de nuestro comando. Si estamos en ese caso lo haremos así:
User@Localhost$ comando_a_ejecutar 2>&1 | tee -a fichero
Y por último, quizás seais unos pesados que quereis tener la salida estandar y los errores por pantalla, a la vez que un fichero con los errores, otro con la salida estandar , y otro con todo junto. Vale, eso es tan sencillo (vale, quizás no) como hacer lo siguiente:
User@Localhost$ ((( comando_a_ejecutar | tee salida.log ) 3>&2 2>&1 1>&3 | tee errores.log ) 3>&2 2>&1 1>&3 ) 2>&1 | tee todojunto.log
Junio 24th, 2008 a las 18:01
Es el típico recurso que cuando lo lees no te hace falta, y cuando te hace falta, fijo que no lo encuentras. Yo por si acaso me lo guardo, que nunca se sabe…..