Cómo usar el comando Tee en Linux

Si alguna vez usa tuberías y redirecciones en su shell de Linux, es probable que a veces también necesite hacer uso de la tee utilidad.

¿Qué hace Tee?

Un comando como

mostrará el contenido de su directorio actual. En otras palabras, muestra estos contenidos en stdout (salida estándar), que normalmente es su pantalla, o para ser más precisos, la pantalla de su terminal virtual.

Un comando como

no mostrará nada en su pantalla. Eso es porque el > sign redirige toda la salida a un archivo en lugar de mostrarlo en stdout. file123 ahora se llenará con el contenido que se mostraba anteriormente en su pantalla.

Para mostrar el contenido de su directorio en la pantalla y escribirlo en un archivo, usa dos comandos. Con tee puede hacer ambas cosas a la vez.

¿Por qué usar Tee si puede ejecutar un comando similar dos veces?

En el ejemplo anterior, obviamente no necesitas tee si puedes ejecutar ls normalmente y luego ejecutarlo nuevamente y redirigir la salida a un archivo. Sin embargo, se encontrará con situaciones en las que la salida será única. Imagine un escenario en el que intenta diagnosticar un problema. Tu corres diagnose | tee error.log. Los errores que obtenga pueden ser únicos. Desea que se muestren en la pantalla para que pueda ver lo que está sucediendo mientras prueba las cosas. Pero también desea que esos errores se guarden en un archivo, para que pueda revisarlos más tarde o pegar el resultado en un foro de discusión y preguntarle a la gente al respecto.

Otra situación, que se encuentra a menudo, cuando puede necesitar tee, es la siguiente: desea escribir la salida de un comando en una ubicación donde solo el usuario root puede leer o escribir. Esto no funcionará.

Entonces, puedes pensar: “Bueno, por supuesto, ¡usa sudo!” Y te sorprenderá que esto tampoco funcione:

Eso es porque despues sudo blkid se ejecuta, todavía está conectado como su usuario habitual, no root. Y tu shell (normalmente bash), intenta escribir a /root/somefile con sus credenciales de usuario habituales. Para resolver esto, puede usar tee:

Agregar texto y redireccionar errores

tee es un comando útil pero simple; un basico command | tee somefile será suficiente la mayoría de las veces. Sin embargo, hay dos escenarios que puede encontrar que requieran estos consejos.

Lo primero que debe saber es que tee, por defecto, siempre sobrescribe un archivo. Si tu corres

y entonces

el segundo comando sobrescribirá el contenido de algún archivo, y solo verá el contenido del último comando ejecutado. Para cambiar este comportamiento, puede hacer que tee agregue texto en lugar de sobrescribirlo. Para hacerlo, solo use el -a interruptor de comando.

Lo segundo que debe saber es que no todos los resultados son iguales. Los mensajes de error se tratan de manera diferente y, aunque aparecen en la pantalla, no se consideran stdout, por lo que no serán detectados por la camiseta. (Se consideran stderr.) Aquí hay un ejemplo de grep.

Mostrará algo como la siguiente imagen.

Salida Tee Grep

Los mensajes de permiso denegado se escriben en stderr. Lo único que se escribe en stdout es el texto resaltado. Es por eso que notará que el contenido de “algún archivo” es lo que se muestra en la imagen de abajo.

Contenido del archivo Tee Grep

En este caso, cuando se usa grep para buscar texto, es útil que los mensajes de error no se redirijan al archivo. Simplemente llenarían el archivo con basura innecesaria. Solo desea ver los resultados encontrados. Pero cuando necesite los mensajes de error, use 2>&1, que redirige stderr a stdout.

Con este comando notará que algún archivo ahora también contiene los mensajes de error.

Conclusión

Con suerte, este tutorial cubre todo lo que necesita para aprovechar al máximo el comando tee. Pero si se encuentra en una situación en la que se queda atascado con la camiseta, deje un comentario a continuación y es posible que podamos ayudarlo.

¿Es útil este artículo?

Puedes compartirlo con algun conocido(a) que le pueda interesar

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *