Linux. Команда tee

30.03.2018

Теги: BashCLILinuxstderrstdinstdoutКомандаПоток

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

$ tee [опции] файл

Используется для разделения выводимых программой данных, таким образом данные могут быть использованы для вывода на дисплей и сохранены в файл. Также команда может быть использована для получения промежуточных данных, до того как они будут изменены другой программой или командой.

Опции

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

Пример использования:

$ ping yandex.ru | tee ping-yandex.txt

Чтобы дописать данные в существующий файл:

$ ping yandex.ru | tee -a ping-yandex.txt

Использование совместно с sudo:

$ echo "Content of file..." | sudo tee root_owned_file > /dev/null

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

Перенаправление stderr:

$ ls ./ qwerty.txt 2>&1 | tee ls.log

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

Справка по команде

$ tee --help
Использование: tee [ПАРАМЕТР]… [ФАЙЛ]…

Копирует стандартный ввод в каждый ФАЙЛ, а также в стандартный вывод.

  -a, --append              дописать в заданные ФАЙЛЫ, не перезаписывать
  -i, --ignore-interrupts   игнорировать сигналы прерывания
  -p                          обнаруживать ошибки записи не в каналы
     --output-error[=РЕЖИМ]   задать поведение при ошибке
                              Описание РЕЖИМов далее
      --help     показать эту справку и выйти
      --version  показать информацию о версии и выйти

В РЕЖИМе задаётся поведение при ошибках записи в выводы:
  «warn»         диагностические ошибки записи в любой вывод
  «warn-nopipe»  диагностические ошибки записи в любой вывод кроме канала
  «exit»         завершать работу при ошибках записи в любой вывод
  «exit-nopipe»  завершать работу при ошибках записи в любой вывод кроме канала

По умолчанию значение РЕЖИМа для параметра -p равно «warn-nopipe».
Если --output-error не указан, то по умолчанию выполняет немедленное
прекращение работы при ошибке записи в канал, или диагностические
ошибки записи в любой не канальный вывод.

Поиск: Bash • CLI • Linux • Команда • tee

Каталог оборудования
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Производители
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Функциональные группы
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.