Cuando queremos guardar la salida de un comando en un archivo utilizamos el operador de redirección simple >. Si deseamos agregar más contenido posteriormente usamos el operador de redirección doble >>. En el caso de que queramos enviar la salida de un comando como entrada a otro empleamos el operador tubería |. ¿Pero qué sucede cuando deseamos ver la salida de un comando por pantalla Y guardar el resultado en un archivo? Por eso en este post explicaremos cómo usar tee en Linux para lograr ambas cosas simultáneamente.
Usar tee en Linux
Veamos un ejemplo trivial primero. Como sabemos, el comando
ls -l
nos mostrará un listado detallado de los contenidos del directorio actual. Esto incluye permisos, dueño, grupo propietario, y fecha de última modificación de cada ítem, entre otros datos. Al complementar este comando con una tubería y enviando la salida hacia tee lograremos nuestro objetivo. La salida será visible por pantalla y será guardada en el archivo listado.txt:
ls -l | tee listado.txt
Veamos el resultado en la Fig. 1:
Otro ejemplo
Ahora pasemos a un ejemplo más útil. Para guardar el resultado de consultas sucesivas a una base de datos MySQL o MariaDB podemos hacer lo siguiente. Utilizaremos dos consultas para ilustrar el concepto, aunque el principio es válido para la cantidad que sea.
El siguiente comando devolverá todos los registros de la tabla tbl_articulos (ubicada dentro de la base de datos gestion) y los guardará en el archivo datos.txt:
mysql -u root -p -e "USE gestion; SELECT * FROM tbl_articulos;" | tee datos.txt
A continuación realizaremos una segunda consulta, esta vez a la tabla tbl_presupuestos. Utilizaremos la opción --append
para que los resultados se agreguen al archivo en vez de borrar los contenidos anteriores:
mysql -u root -p -e "USE gestion; SELECT * FROM tbl_presupuestos;" | tee --append datos.txt
En la Fig. 2 podemos ver el contenido de datos.txt luego de las dos consultas anteriores:
Espero que este post les haya resultado útil. ¡Nos encontramos en el próximo!