Источник: https://losst.ru/komanda-tee-linux
Однажды при написании скрипта архивации сайта мне понадобилось чтобы лог, который формировался при работе скрипта, также показывался и в консоли, чтобы видеть этапы резервного копирования, если оно запущено вручную. Перенаправление вывода команд мне не помогло, - либо в консоль, либо в лог. И тогда я обнаружил для себя команду tee, которая служит для записи вывода любой команды в один или несколько файлов и при этом копирует вывод на экран.
$ tee опции файл
Ключи команды:
-a, --append - дописать в заданные ФАЙЛЫ
-i, --ignore-interrupts - игнорировать сигналы прерывания
--help или --h - показать эту справку и выйти
--version или --v - показать информацию о версии и выйти
Для сохранения вывода команды можно передать один или несколько файлов.
Команда ls -la нужна в Linux для показа списка файлов с описанием в текущем каталоге. Здесь команда tee используется для сохранения вывода ls -la в файл вывод.txt Введите следующие команды в терминале, чтобы проверить как работает команда tee.
ls -la | tee вывод.txt
cat вывод.txt
Здесь первая команда показала вывод списка файлов в текущем каталоге в терминал и записала полученные данные в файл вывод.txt.
Вторая команда показала содержимое файла вывод.txt
Если вывод любой команды записать в существующий файл с применением команды tee и операции -a, содержимое файла не будет перезаписано. Здесь вывод команды pwd будет добавлен в конец файла вывод.txt Запустите следующие команды с помощью терминала:
pwd | tee -a вывод.txt
cat вывод.txt
Здесь первая команда отображает вывод pwd в терминал и записывает вывод в конец файла вывод.txt Вторая команда используется для выделения вывода файла. Показано, что файл вывод.txt содержит оба результата: из предыдущего примера и из этого.
Команда tee может использоваться для вывода любой команды сразу в несколько файлов. Для этого необходимо указать имена файлов, разделив их пробелом. Используйте следующие команды для сохранения вывода date в два файла: вывод1.txt и вывод2.txt
date | tee вывод1.txt вывод2.txt
cat вывод1.txt вывод2.txt
Здесь первая команда выводит текущее системное время и сохраняет полученные результаты в два файла вывод1.txt и вывод2.txt Вторая команда показывает идентичное содержимое обоих файлов.
Команда tee linux с опцией -i используется в этом примере, чтобы игнорировать любые прерывания во время ее выполнения. Таким образом, команда будет выполнена правильно, даже если пользователь нажимает CTRL+C. Выполните следующие команды в терминале.
wc -l вывод.txt | tee -i вывод3.txt
cat вывод.txt
cat вывод3.txt
Здесь первая команда считает количество строчек в файле вывод.txt и сохраняет полученный результат в файл вывод3.txt Вторая команда показывает содержимое файла вывод.txt, который содержит 37 строчек. Третья команда показывает содержимое файла вывод3.txt, в котором указано, что он действительно содержит 37 строчек.
Вывод команды tee может быть перенесен в другую команду. В этом примере вывод из первой команды переносится в tee, а ее вывод — в другую команду. Запустите следующие команды в терминале:
ls | tee вывод4.txt | wc -lcw
ls
cat вывод4.txt
Здесь первая команда используется для записи вывода ls в файл вывод4.txt и подсчета общего числа строк, слов и символов в файле вывод4.txt Вторая команда используется для отображения вывода команды ls, а третья — для отображения содержимого файла вывод4.txt
Команда tee также может использоваться для записи вывода bash-скрипта в файл. Создайте bash-файл с приведенным кодом, который возьмет два входных числа из аргументов командной строки и выведет сумму этих чисел. Команда tee используется в этом примере для записи вывода add.sh в файл результат.txt
Запустите следующую команду в терминале для записи файла и отображения его содержимого.
bash add.sh 40 80 | tee результат.txt
cat результат.txt
Здесь числа 40 и 80 переносятся в качестве аргументов командной строки в скрипт add.sh и вывод записывается в файл результат.txt Команда cat выводит соответствующий результат.
Если вы хотите записать вывод прямо в файл и не показывать его в терминале, используйте /dev/null с командой tee. Для этого выполните следующие команды.
df | tee вывод5.txt > /dev/null
cat вывод5.txt
Здесь первая команда используется для записи вывода команды df в файл вывод5.txt, при этом вывод не показывается в терминале. Вторая команда показывает полученный результат.