Команда
tee позволяет записывать вывод одновременно в файл и отображать его в терминале. Но её возможности гораздо шире, чем кажется на первый взгляд!1. Добавление данных в файл. По умолчанию tee перезаписывает файл, но с опцией -a можно добавлять данные:
echo "Новая строка" | tee -a output.txt
Файл output.txt сохранит все предыдущие данные и добавит новую строку.
2. Дублирование вывода в несколько файлов. Вы можете одновременно записывать данные в несколько файлов:
echo "Логи обновлены" | tee log1.txt log2.txt log3.txt
Всё, что выведет команда, будет сохранено в трёх файлах одновременно.
3. Объединение с sudo. Иногда права доступа мешают записывать данные в файлы. Вот как решить это:
echo "Системная настройка" | sudo tee /etc/config.txt
Этот приём обходит ограничения записи без использования дополнительных редакторов.
4. Трансформация данных в реальном времени. tee можно использовать в пайплайнах для промежуточной проверки данных:
cat bigfile.txt | tee preview.txt | grep "важные данные" > result.txt
Здесь tee записывает содержимое файла в preview.txt, а затем передаёт его на обработку через grep.
5. Обработка stderr. По умолчанию tee работает только с stdout, но есть способ записывать и stderr:
{ ls non_existing_file 2>&1 1>&3 | tee errors.log; } 3>&1
Этот трюк записывает ошибки в файл errors.log и одновременно выводит их на экран.
Полезные сценарии использования
1. Живой логинг: Сохраняйте данные и анализируйте их в реальном времени:
tail -f /var/log/syslog | tee live_log.txt
2. Одновременная передача данных в файл и на удалённый сервер:
some_command | tee local_log.txt | ssh user@server "cat > remote_log.txt"
3. Дублирование вывода сложных операций:
{ make build | tee build.log; } 2>&1 | grep "Error"
BashTex 📱 #linux #utils