En informática, tee
es un comando en intérpretes de línea de comandos ( shells ) que utilizan flujos estándar que leen la entrada estándar y la escriben tanto en la salida estándar como en uno o más archivos, duplicando efectivamente su entrada. [1] Se utiliza principalmente junto con tuberías y filtros . El comando recibe su nombre del divisor en T utilizado en plomería . [2]
El tee
comando se utiliza normalmente para dividir la salida de un programa de modo que se pueda visualizar y guardar en un archivo. El comando se puede utilizar para capturar la salida intermedia antes de que otro comando o programa altere los datos. El comando tee lee la entrada estándar y luego escribe su contenido en la salida estándar . Al mismo tiempo, copia los datos en los archivos o variables especificados. La sintaxis difiere según la implementación del comando.
El comando está disponible para sistemas operativos Unix y similares a Unix , Microware OS-9 , [3] DOS (por ejemplo, 4DOS , FreeDOS ), Microsoft Windows (por ejemplo, 4NT , Windows PowerShell ) y ReactOS . [4] El comando para Linux fue escrito por Mike Parker, Richard Stallman y David MacKenzie. [5] El comando está disponible como un paquete separado para Microsoft Windows como parte de la colección UnxUtils de puertos Win32 nativos de utilidades comunes similares a Unix de GNU. [6] La versión FreeDOS fue desarrollada por Jim Hall y tiene licencia GPL . [7]
El comando tee también se ha portado al sistema operativo IBM i . [8] tee
Además, el comando sponge
[9] ofrece capacidades similares.
tee [ -a ] [ -i ] [ Archivo ... ]
Argumentos:
File ...
Una lista de archivos, cada uno de los cuales recibe la salida.Banderas:
-a
Añade la salida a cada archivo, en lugar de sobrescribirla.-i
Ignora las interrupciones.El comando devuelve los siguientes valores de salida ( estado de salida ):
El uso de la sustitución de procesos permite que más de un proceso lea la salida estándar del proceso original. Lea este ejemplo de GNU Coreutils, invocación de tee.
Nota: Si una escritura en cualquier operando de archivo abierto exitosamente no es exitosa, las escrituras en otros operandos de archivo abiertos exitosamente y la salida estándar continuarán, pero el valor de salida será >0.
Archivo TEE [/A]...
Argumentos:
file
Uno o más archivos que recibirán la salida "tee'd".Banderas:
/A
Añade el contenido de la canalización a los archivos de salida en lugar de sobrescribirlos.Nota: Cuando se utiliza tee con una tubería, la salida del comando anterior se escribe en un archivo temporal . Cuando finaliza ese comando, tee lee el archivo temporal, muestra la salida y la escribe en el archivo o archivos proporcionados como argumento de la línea de comandos .
tee [-FilePath] <Cadena> [-InputObject <PSObject>]tee -Variable <Cadena> [-ObjetoEntrada <ObjetoPS>]
Argumentos:
-InputObject <PSObject>
Especifica la entrada del objeto al cmdlet. El parámetro acepta variables que contienen los objetos y comandos o expresiones que devuelven los objetos.-FilePath <String>
Especifica el archivo donde el cmdlet almacena el objeto. El parámetro acepta caracteres comodín que se resuelven en un único archivo.-Variable <String>
Se asignará una referencia a los objetos de entrada a la variable especificada.Nota: tee se implementa como un ReadOnly
alias de comando . El nombre del cmdlet interno es Microsoft.PowerShell.Utility\Tee-Object
.
programa lint.c | programa tee.lint
Esto muestra la salida estándar del comando lint program.c
en la computadora y, al mismo tiempo, guarda una copia del mismo en el archivo program.lint
. Si ya existe un archivo llamado program.lint
, se elimina y se reemplaza.
De manera similar, tanto los flujos de salida stdout como stderr se pueden redirigir a la salida estándar y a la program.lint
redirección del flujo using:
programa lint.c 2 > & 1 | programa tee.lint
programa lint.c | tee -a programa lint
Esto muestra la salida estándar del lint program.c
comando en la computadora y, al mismo tiempo, agrega una copia del mismo al final del program.lint
archivo. Si el program.lint
archivo no existe, se crea.
gato ~/.ssh/id_rsa.pub | ssh admin@servidor "sudo tee -a /root/.ssh/authorized_keys2 > /dev/null"
Este ejemplo muestra que se utiliza tee para eludir una limitación inherente en el comando sudo . sudo no puede enviar la salida estándar a un archivo. Al volcar su flujo de salida estándar en /dev/null
, también suprimimos la salida reflejada en la consola. El comando anterior le otorga al usuario actual acceso root a un servidor a través de ssh, al instalar la clave pública del usuario en la lista de autorización de claves del servidor.
En Bash , la salida se puede filtrar antes de escribirse en el archivo (sin afectar la salida mostrada) mediante la sustitución de procesos . Por ejemplo,
ls --color = siempre | camiseta > ( sed "s/\x1b[^m]*m//g" > ls.txt )
elimina los códigos de escape ANSI comunes antes de escribir en ls.txt
, pero los conserva para su visualización. [10]
Este ejemplo busca en el archivo wikipedia.txt
cualquier línea que contenga la cadena " 4DOS ", hace una copia de las líneas coincidentes 4DOS.txt
, ordena las líneas y las escribe en el archivo de salida 4DOSsorted.txt
:
> buscar "4DOS" wikipedia.txt | tee 4DOS.txt | ordenar > 4DOSsorted.txt
ipconfig | tee Archivo de salida . txt
Esto muestra la salida estándar del comando ipconfig
en la ventana de la consola y simultáneamente guarda una copia del mismo en el archivo OutputFile.txt
.
Obtener-Proceso | Dónde-Objeto { $_ . Nombre -como "svc*" } | Tee-Objeto ABC . txt | Dónde-Objeto { $_ . Identificadores -gt 1000 }
Este ejemplo muestra que la entrada canalizada para tee se puede filtrar y que tee se usa para mostrar esa salida, que se filtra nuevamente para que solo se muestren los procesos que poseen más de 1000 identificadores, y escribe la salida sin filtrar en el archivo ABC.txt
.