GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo funciona el comando Tee??

Cerrado . Esta pregunta necesita detalles o claridad. Actualmente no está aceptando respuestas.

¿Quieres mejorar esta pregunta? Agrega detalles y aclara el problema editando esta publicación.

Cerrado hace 4 años.


Mejorar esta pregunta

Después de encontrar unos 3 tee explicaciones que considero poco didácticas, pediría una explicación simple, general y escalonada (si es posible) sobre este comando, dirigida a los recién llegados a Linux.

Entiendo que lo usamos a través de una canalización, en la salida estándar de un comando o, alternativamente, directamente en un archivo determinado, pero creo que extraño lo que el comando realmente hace con este contenido y cuándo es útil.

Así que esto es lo que pregunto, con la esperanza de encontrar una explicación didáctica, servida a los recién llegados de una manera clara y escalonada:

  1. ¿Cómo funciona el comando con la salida estándar de un comando o, alternativamente, con los propios archivos?

  2. ¿Por qué es común decir tee? lee la entrada estándar? Quiero decir, si hago ls -l , tee no lee la sintaxis ls -l en sí, sino en la salida estándar que imprimió en la sesión.

Además, si lo desea, comparta un ejemplo práctico de su trabajo diario sobre cuándo tee ¿Te resulta muy útil?

Respuesta aceptada:

Desde el tee manual en mi sistema:

La utilidad tee copia la entrada estándar a la salida estándar, haciendo una copia
en cero o más archivos. La salida no tiene búfer.

Por lo tanto, lee la entrada estándar y la copia en la salida estándar y, al hacerlo, también duplica la secuencia en uno o varios archivos.

En la siguiente canalización, tee tomaría la salida del primer comando en la canalización y la copiaría a la salida estándar (el terminal) mientras también hacía copias de ella en los archivos one , two y three :

$ somecommand | tee one two three

tee tiene muchos usos, uno es en conjunto con sudo para redirigir la salida a un archivo propiedad de root:

$ somecommand | sudo tee /root/somefile >/dev/null

Lo siguiente no han funcionado ya que la redirección ocurre como usuario sin privilegios (también ejecutaría somecommand como root que puede no ser deseado):

$ sudo somecommand >/root/somefile

Un ejemplo artificial de agregar un conjunto fijo de líneas a muchos archivos a la vez (a todos los usuarios ~/.profile archivos, asumiendo que el * se expande a los nombres de usuario y que la línea de comando expandida no se vuelve demasiado larga para que la maneje el shell):

$ tee -a /home/*/.profile <<'END_NEWPATH'
PATH="$PATH:/opt/bin"
END_NEWPATH

Un ejemplo real del uso de tee :

time doas box-build.sh 2>&1 | tee build.out |  grep '^=*>'

Este soy yo construyendo el sistema base de OpenBSD. doas es el "equivalente" de OpenBSD de sudo y box-build.sh es un pequeño script de shell que hace la construcción (esencialmente cd /usr/src && make obj && make build ). Me gustaría almacenar el resultado de todo el proceso de compilación, incluidos los errores o advertencias, pero no quiero que todo salga a la luz en mi terminal. Para ello utilizo tee para guardar todo en build.out y luego grep para obtener solo una pista de en qué parte del proceso nos encontramos en la terminal.

Relacionado:¿Script de Shell con función y parámetro como variables?
Linux
  1. Cómo usar el comando grep de Linux

  2. ¿Cómo usar el comando basename?

  3. ¿Cómo funciona el comando Exit en una terminal Unix?

  4. ¿Cómo se interpreta el comodín * como un comando?

  5. ¿Cómo calcula el comando stat los bloques de un archivo?

Cómo usar el comando xargs de Linux

Cómo usar el comando tee de Linux

Cómo usar el comando superior en Linux

Cómo usar el comando ping de Linux

Cómo usar el comando nmap

Cómo personalizar el comando superior de Linux