тройник (команда)
Разработчик(и) | AT&T Bell Laboratories , Майк Паркер, Ричард Столлман , Дэвид Маккензи, Microware , Джим Холл , JP Software , Microsoft |
---|---|
Первоначальный выпуск | июнь 1974 г |
Написано в | С |
Операционная система | Unix , Unix-подобные , Plan 9 , Inferno , OS-9 , FreeDOS , Windows , ReactOS , IBM i |
Платформа | Кросс-платформенный |
Тип | Команда |
Лицензия | FreeDOS: GPL-2.0 или новее. РеактОС: GPLv2. План 9: МОЯ лицензия |
В вычислениях, tee
— это команда в интерпретаторах командной строки ( оболочках ), использующая стандартные потоки , которая считывает стандартный ввод и записывает его как в стандартный вывод, так и в один или несколько файлов, эффективно дублируя ввод. [1] В основном используется в сочетании с трубами и фильтрами . Команда названа в честь Т-образного разветвителя, используемого в сантехнике . [2]
Обзор
[ редактировать ]
ls -l
перенаправляется на tee , который копирует их в файл file.txt и на пейджер. less
. Название тройника происходит от этой схемы — оно похоже на заглавную букву Т. The 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] Команда предлагает аналогичные возможности.
Unix и Unix-подобные
[ редактировать ]tee [ -a ] [ -i ] [ File ... ]
Аргументы:
File ...
Список файлов, каждый из которых получает выходные данные.
Флаги:
-a
Добавляет вывод к каждому файлу, а не перезаписывает его.-i
Игнорирует прерывания.
Команда возвращает следующие значения выхода ( статус выхода ):
- 0 Стандартный ввод успешно скопирован во все выходные файлы.
- >0 Произошла ошибка.
Использование подстановки процессов позволяет нескольким процессам читать стандартный вывод исходного процесса. Прочтите этот пример из GNU Coreutils, вызов tee .
Примечание. Если запись в любой успешно открытый операнд файла не удалась, запись в другие успешно открытые операнды файла и стандартный вывод будут продолжены, но значение выхода будет >0.
4DOS и 4NT
[ редактировать ]TEE [/A] file...
Аргументы:
file
Один или несколько файлов, которые получат вывод «tee'd».
Флаги:
/A
Добавьте содержимое конвейера в выходные файлы, а не перезаписывайте их.
Примечание. Если tee используется с каналом, выходные данные предыдущей команды записываются во временный файл . Когда эта команда завершается, tee считывает временный файл, отображает выходные данные и записывает их в файл(ы), заданные в качестве аргумента командной строки .
Windows PowerShell
[ редактировать ]tee [-FilePath] <String> [-InputObject <PSObject>] tee -Variable <String> [-InputObject <PSObject>]
Аргументы:
-InputObject <PSObject>
Указывает ввод объекта в командлет. Параметр принимает переменные, содержащие объекты, а также команды или выражения, возвращающие объекты.-FilePath <String>
Указывает файл, в котором командлет сохраняет объект. Параметр принимает подстановочные знаки , которые относятся к одному файлу.-Variable <String>
Указанной переменной будет присвоена ссылка на входные объекты.
Примечание: тройник реализован как ReadOnly
псевдоним команды . Внутреннее имя командлета: Microsoft.PowerShell.Utility\Tee-Object
.
Примеры
[ редактировать ]Unix и Unix-подобные
[ редактировать ]- просмотреть и сохранить выходные данные команды ( lint ): Чтобы одновременно
lint program.c | tee program.lint
Это отображает стандартный вывод команды lint program.c
на компьютере, и при этом сохраняет его копию в файл program.lint
. Если файл с именем program.lint
уже существует, он удаляется и заменяется.
Аналогично, потоки вывода stdout и stderr могут быть перенаправлены на стандартный вывод, а поток вывода — stderr. program.lint
используя перенаправление потока:
lint program.c 2>&1 | tee program.lint
- Чтобы просмотреть и добавить вывод команды в существующий файл:
lint program.c | tee -a program.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=always | tee >(sed "s/\x1b[^m]*m//g" > ls.txt)
удаляет общие escape-коды ANSI перед записью в ls.txt
, но сохраняет их для отображения. [10]
4DOS и 4NT
[ редактировать ]В этом примере выполняется поиск файла wikipedia.txt
для любых строк, содержащих строку « 4DOS », делает копию соответствующих строк в 4DOS.txt
, сортирует строки и записывает их в выходной файл 4DOSsorted.txt
:
>find "4DOS" wikipedia.txt | tee 4DOS.txt | sort > 4DOSsorted.txt
Windows PowerShell
[ редактировать ]- Чтобы одновременно просмотреть и сохранить выходные данные команды:
ipconfig | tee OutputFile.txt
Это отображает стандартный вывод команды ipconfig
в окне консоли и одновременно сохраняет его копию в файле OutputFile.txt
.
- Для отображения и сохранения всех запущенных процессов только программы, начинающиеся с svc и имеющие более 1000 дескрипторов : , отфильтрованных так, чтобы выдавались
Get-Process | Where-Object { $_.Name -like "svc*" } | Tee-Object ABC.txt | Where-Object { $_.Handles -gt 1000 }
В этом примере показано, что передаваемые по конвейеру входные данные для tee можно фильтровать и что tee используется для отображения этих выходных данных, которые снова фильтруются, чтобы отображались только процессы, имеющие более 1000 дескрипторов, и записывают нефильтрованные выходные данные в файл. ABC.txt
.
- Windows Powershell не подходит для двоичных и необработанных данных, всегда обрабатывает поток как текст и изменяет данные по мере их передачи.
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ «Страница руководства для тройника (posix, раздел 1)» . IEEE Std 1003.1, издание 2003 г., Стандарт информационных технологий — интерфейс переносимой операционной системы (POSIX), базовые спецификации открытой группы, выпуск 6 . Проверено 1 декабря 2013 г.
- ^ «Что в Unix означают некоторые непонятно названные команды?» . Проверено 3 февраля 2012 г.
- ^ Пол С. Даян (1992). OS-9 Guru-1: Факты . Галактика Индастриал Лимитед. ISBN 0-9519228-0-7 .
- ^ «реактос/реактос» . Гитхаб . 3 января 2022 г.
- ^ «tee: чтение со стандартного ввода и запись в стандартный вывод и файлы» . www.mankier.com .
- ^ «Собственные порты Win32 некоторых утилит GNU» . unxutils.sourceforge.net .
- ^ «Пакет ibiblio.org FreeDOS — тройник (Unix-подобный)» . www.ibiblio.org .
- ^ ИБМ . «IBM System i Версия 7.2 Программирование Qshell» (PDF) . ИБМ . Проверено 5 сентября 2020 г.
- ^ «губка(1): впитывать стандартный ввод/записывать в файл — справочная страница Linux» . linux.die.net .
- ^ «GNU Coreutils: вызов тройника» . Проверено 3 февраля 2016 г.
Дальнейшее чтение
[ редактировать ]- МакЭлхирн, Кирк (2006). Командная строка Mac OS X: Unix под капотом . Джон Уайли и сыновья . ISBN 978-0470113851 .
Внешние ссылки
[ редактировать ]
- Введение в перенаправление ввода-вывода в Linux «Перенаправление ввода-вывода в Linux». Архивировано 10 июня 2012 г. на Wayback Machine с тройником.
- Руководство по тройнику GNU
- Единая спецификация UNIX , Версия 4 от The Open Group : дубликат стандартного ввода – Справочник по командной строке и утилитам,
- Plan 9 , том 1 Руководство программиста –
- Inferno по общим командам Руководство –
- Delphi-Tee — Delphi (программное обеспечение) с открытым исходным кодом . реализация