¿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:
-
¿Cómo funciona el comando con la salida estándar de un comando o, alternativamente, con los propios archivos?
-
¿Por qué es común decir
tee
? lee la entrada estándar? Quiero decir, si hagols -l
,tee
no lee la sintaxisls -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.