В вычислительной технике tee
— команда в интерпретаторах командной строки ( оболочках ), использующих стандартные потоки , которая считывает стандартный ввод и записывает его как в стандартный вывод, так и в один или несколько файлов, эффективно дублируя свой ввод. [1] В основном используется в сочетании с каналами и фильтрами . Команда названа в честь Т-образного разветвителя, используемого в сантехнике . [2]
Команда tee
обычно используется для разделения вывода программы, чтобы его можно было как отобразить, так и сохранить в файле. Команда может использоваться для захвата промежуточного вывода до того, как данные будут изменены другой командой или программой. Команда tee считывает стандартный ввод , а затем записывает его содержимое в стандартный вывод . Она одновременно копирует данные в указанные файлы или переменные. Синтаксис различается в зависимости от реализации команды.
Команда доступна для Unix и Unix-подобных операционных систем , Microware OS-9 , [3] DOS (например, 4DOS , FreeDOS ), Microsoft Windows (например, 4NT , Windows PowerShell ) и ReactOS . [4] Команда для Linux tee
была написана Майком Паркером, Ричардом Столлманом и Дэвидом Маккензи. [5] Команда доступна в виде отдельного пакета для Microsoft Windows как часть коллекции UnxUtils собственных портов Win32 распространенных утилит GNU Unix. [6] Версия для FreeDOS была разработана Джимом Холлом и лицензирована по лицензии GPL . [7]
Команда tee также была перенесена в операционную систему IBM i . [8]
Кроме того, команда sponge
[9] предлагает аналогичные возможности.
tee [ -a ] [ -i ] [ Файл ... ]
Аргументы:
File ...
Список файлов, каждый из которых получает вывод.Флаги:
-a
Добавляет вывод к каждому файлу, а не перезаписывает его.-i
Игнорирует прерывания.Команда возвращает следующие значения выхода ( статус выхода ):
Использование подстановки процесса позволяет нескольким процессам читать стандартный вывод исходного процесса. Прочитайте этот пример из GNU Coreutils, вызов tee.
Примечание: Если запись в любой успешно открытый операнд Файл не удалась, запись в другие успешно открытые операнды Файл и стандартный вывод будут продолжены, но выходное значение будет >0.
Файл TEE [/A]...
Аргументы:
file
Один или несколько файлов, которые получат вывод «tee'd».Флаги:
/A
Добавляйте содержимое конвейера к выходным файлам, а не перезаписывайте их.Примечание: Когда tee используется с каналом, вывод предыдущей команды записывается во временный файл . Когда эта команда завершается, tee считывает временный файл, отображает вывод и записывает его в файл(ы), заданный в качестве аргумента командной строки .
tee [-FilePath] <Строка> [-InputObject <PSObject>]tee -Variable <Строка> [-InputObject <PSObject>]
Аргументы:
-InputObject <PSObject>
Указывает объектный ввод для командлета. Параметр принимает переменные, содержащие объекты, и команды или выражения, возвращающие объекты.-FilePath <String>
Указывает файл, в котором командлет сохраняет объект. Параметр принимает подстановочные знаки , которые разрешаются в один файл.-Variable <String>
Указанной переменной будет присвоена ссылка на входные объекты.Примечание: tee реализован как ReadOnly
псевдоним команды . Внутреннее имя командлета — Microsoft.PowerShell.Utility\Tee-Object
.
lint program.c | tee program.lint
Это отображает стандартный вывод команды lint program.c
на компьютере и в то же время сохраняет его копию в файле program.lint
. Если файл с таким именем program.lint
уже существует, он удаляется и заменяется.
Аналогично, потоки вывода stdout и stderr можно перенаправить на стандартный вывод, program.lint
используя перенаправление потока:
lint program.c 2 > & 1 | tee program.lint
lint программа.c | tee -a программа.lint
Это отображает стандартный вывод команды lint program.c
на компьютере и одновременно добавляет его копию в конец файла program.lint
. Если program.lint
файл не существует, он создается.
cat ~/.ssh/id_rsa.pub | ssh admin@server "sudo tee -a /root/.ssh/authorized_keys2 > /dev/null"
В этом примере показано, как tee используется для обхода неотъемлемого ограничения команды sudo . sudo не может перенаправить стандартный вывод в файл. Сбрасывая свой поток stdout в /dev/null
, мы также подавляем зеркальный вывод в консоли. Команда выше предоставляет текущему пользователю root-доступ к серверу через ssh, устанавливая открытый ключ пользователя в список авторизации ключей сервера.
В Bash вывод может быть отфильтрован перед записью в файл — без влияния на отображаемый вывод — с помощью подстановки процесса . Например,
ls --color = всегда | tee > ( sed "s/\x1b[^m]*m//g" > ls.txt )
удаляет общие управляющие коды ANSI перед записью в ls.txt
, но сохраняет их для отображения. [10]
В этом примере выполняется поиск в файле wikipedia.txt
строк, содержащих строку « 4DOS », копирование соответствующих строк в 4DOS.txt
, сортировка строк и запись их в выходной файл 4DOSsorted.txt
:
> найти "4DOS" wikipedia.txt | tee 4DOS.txt | сортировать > 4DOSsorted.txt
ipconfig | tee Выходной файл . txt
Это отображает стандартный вывод команды ipconfig
в окне консоли и одновременно сохраняет его копию в файле OutputFile.txt
.
Get-Process | Where-Object { $_ . Имя -like "svc*" } | Tee-Object ABC . txt | Where-Object { $_ . Handles -gt 1000 }
В этом примере показано, что переданный по каналу вход для tee может быть отфильтрован, и что tee используется для отображения этого вывода, который снова фильтруется, чтобы отображались только процессы, владеющие более чем 1000 дескрипторами, и записывает неотфильтрованный вывод в файл ABC.txt
.