tee

Применение команды tee: Результат команды ls пересылается в tee, который копирует его в файл file.txt и в команду less. Название tee происходит от английского обозначения трубопроводного тройника, имеющего форму заглавной буквы Т.

tee — команда, выводящая на экран, или же перенаправляющая выходной поток команды и копирующая его содержимое в файл или в переменную. В первую очередь, команда используется в привязке с перенаправлениями и фильтрами. Используется во множестве оболочек операционных систем, таких как Unix, 4DOS/4NT и Windows PowerShell.

Назначение и синтаксис

[править | править код]

tee используется для разделения выводимых программой данных, таким образом данные могут быть использованы для вывода на дисплей и сохранены в файл. Также команда может быть использована для получения промежуточных данных до того, как они будут изменены другой программой или командой. Команда tee считывает стандартный ввод (stdin), после чего записывает его в стандартный вывод (stdout) и одновременно копирует его в подготовленный файл или переменную. Синтаксис различается в соответствии с местом использования команды.

tee [ -a ] [ -i ] [ File ... ] 

Переменные:

  • File Один, или более, файл, который примет данные от tee.

Флаги:

  • -a Дописать выходящие данные в конец файла, не перезаписывая его содержимого.
  • -i Игнорировать ошибки.

По окончании команда возвращает следующие значения состояния выхода:

Примечание: Если при записи в любой удачно открытый файл операция не удалась, данные запишутся в следующий удачно открытый файл. По итогу операция завершится, но состояние выхода будет >0.

  • Чтобы одновременно увидеть и сохранить выходные данные:
lint program.c | tee program.lint 

Эта команда покажет стандартные выходящие данные команды lint program.c на средстве вывода и в то же самое время сохранит полученные данные в файл program.lint. Если такой файл уже существует, он будет перезаписан.

  • Чтобы получить данные от команды и дописать их в существующий файл:
lint program.c | tee -a program.lint 

Как и в предыдущем примере, на экран будут выведены данные от команды lint program.c, после чего они будут дописаны в конец файла program.lint. Если такой файл не существует, он будет создан.

  • Использование совместно с sudo:
echo "Body of file..." | sudo tee root_owned_file > /dev/null 

В этом примере демонстрируется, как при помощи tee обойти ограничения команды sudo, за счёт которых она не может перенаправлять вывод (stdout) в файл. А дальнейшее перенаправление в /dev/null позволит избежать вывода текста на консоль.

  • Перенаправление STDERR:
ls ./ qwerty 2>&1 | tee ls.log 

По умолчанию команда tee записывает в файл только данные от STDOUT, поэтому, если файл «qwerty» отсутствует в текущем каталоге, в файле ls.log будет перечень имеющихся файлов и каталогов и не будет записи о не найденном файле. На экране же будут отображаться выводы как STDOUT, так и STDERR. Если в файл нужно включить также и данные из STDERR, то необходимо, как в примере выше, перенаправить STDERR на STDOUT.