Existe una herramienta del paquete coreutils que permite lograr este cometido y se llama tee. En este artículo demuestro su utilidad.



¿Qué pasa si deseamos ver la salida de un comando en directo, pero al mismo tiempo deseamos que sea guardada en un archivo para examinarla detalladamente más adelante? Como sabemos, al redirigir la salida de un comando hacia un archivo, no somos capaces de visualizarla mientras ocurre.

Veamos un ejemplo listando un directorio:

emi@hal9000:~$ ls -l /usr/local/
total 32
drwxrwsr-x 2 root staff 4096 Nov 13 09:40 bin
drwxrwsr-x 2 root staff 4096 May  2  2019 etc
drwxrwsr-x 2 root staff 4096 May  2  2019 games
drwxrwsr-x 2 root staff 4096 May  2  2019 include
drwxrwsr-x 4 root staff 4096 Nov  7 08:48 lib
lrwxrwxrwx 1 root staff    9 May  2  2019 man -> share/man
drwxrwsr-x 2 root staff 4096 May  2  2019 sbin
drwxrwsr-x 8 root staff 4096 Nov  7 08:49 share
drwxrwsr-x 2 root staff 4096 Nov  7 10:20 src

Si redirijo la salida hacia un archivo, ésta no se muestra por pantalla:

emi@hal9000:~$ ls -l /usr/local/ > /tmp/salida.txt

Precisamente es así como funcionan las redirecciones en Bash (> y otras), justamente envían la salida estándar a un archivo:

emi@hal9000:~$ cat /tmp/salida.txt 
total 32
drwxrwsr-x 2 root staff 4096 Nov 13 09:40 bin
drwxrwsr-x 2 root staff 4096 May  2  2019 etc
drwxrwsr-x 2 root staff 4096 May  2  2019 games
drwxrwsr-x 2 root staff 4096 May  2  2019 include
drwxrwsr-x 4 root staff 4096 Nov  7 08:48 lib
lrwxrwxrwx 1 root staff    9 May  2  2019 man -> share/man
drwxrwsr-x 2 root staff 4096 May  2  2019 sbin
drwxrwsr-x 8 root staff 4096 Nov  7 08:49 share
drwxrwsr-x 2 root staff 4096 Nov  7 10:20 src

Muchas veces ciertos comandos tienen salidas muy largas que es conveniente guardar en un archivo para examinar cuidadosamente luego, y además para que no se pierda si se llena el buffer de pantalla de la terminal. Pero tal vez al mismo tiempo deseamos ver dicha salida (mientras es guardada en archivo) para verificar el progreso del comando ejecutado. Es decir deseamos enviar la salida hacia un archivo, al mismo tiempo que la visualizamos por pantalla.

El comando tee permite visualizar una salida mientras es en simultáneo enviada a un archivo. Simplemente es necesario pasar un nombre de archivo como parámetro y se encarga de mostrar la salida por pantalla y escribir la misma salida al archivo:

emi@hal9000:~$ ls -l /usr/local/ | tee /tmp/nueva_salida.txt
total 32
drwxrwsr-x 2 root staff 4096 Nov 13 09:40 bin
drwxrwsr-x 2 root staff 4096 May  2  2019 etc
drwxrwsr-x 2 root staff 4096 May  2  2019 games
drwxrwsr-x 2 root staff 4096 May  2  2019 include
drwxrwsr-x 4 root staff 4096 Nov  7 08:48 lib
lrwxrwxrwx 1 root staff    9 May  2  2019 man -> share/man
drwxrwsr-x 2 root staff 4096 May  2  2019 sbin
drwxrwsr-x 8 root staff 4096 Nov  7 08:49 share
drwxrwsr-x 2 root staff 4096 Nov  7 10:20 src

Es posible comprobar que la misma salida mostrada quedó efectivamente guardada en el archivo:

emi@hal9000:~$ cat /tmp/nueva_salida.txt 
total 32
drwxrwsr-x 2 root staff 4096 Nov 13 09:40 bin
drwxrwsr-x 2 root staff 4096 May  2  2019 etc
drwxrwsr-x 2 root staff 4096 May  2  2019 games
drwxrwsr-x 2 root staff 4096 May  2  2019 include
drwxrwsr-x 4 root staff 4096 Nov  7 08:48 lib
lrwxrwxrwx 1 root staff    9 May  2  2019 man -> share/man
drwxrwsr-x 2 root staff 4096 May  2  2019 sbin
drwxrwsr-x 8 root staff 4096 Nov  7 08:49 share
drwxrwsr-x 2 root staff 4096 Nov  7 10:20 src

La opción -a (append) permite agregar al archivo en lugar de sobrescribirlo. Por ejemplo:

emi@hal9000:~$ ps | tee -a /tmp/nueva_salida.txt 
  PID TTY          TIME CMD
 5438 pts/1    00:00:00 bash
 6551 pts/1    00:00:00 ps
 6552 pts/1    00:00:00 tee
emi@hal9000:~$ cat /tmp/nueva_salida.txt 
total 32
drwxrwsr-x 2 root staff 4096 Nov 13 09:40 bin
drwxrwsr-x 2 root staff 4096 May  2  2019 etc
drwxrwsr-x 2 root staff 4096 May  2  2019 games
drwxrwsr-x 2 root staff 4096 May  2  2019 include
drwxrwsr-x 4 root staff 4096 Nov  7 08:48 lib
lrwxrwxrwx 1 root staff    9 May  2  2019 man -> share/man
drwxrwsr-x 2 root staff 4096 May  2  2019 sbin
drwxrwsr-x 8 root staff 4096 Nov  7 08:49 share
drwxrwsr-x 2 root staff 4096 Nov  7 10:20 src
  PID TTY          TIME CMD
 5438 pts/1    00:00:00 bash
 6551 pts/1    00:00:00 ps
 6552 pts/1    00:00:00 tee


Tal vez pueda interesarte


Compartí este artículo