Когда нужно одновременно сохранить вывод в файл, показать его в терминале и отдельно обработать ошибки — многие делают временные файлы или запускают команду несколько раз.
В Bash это решается напрямую:
command > >(tee output.log)
stdout команды одновременно выводится в терминал и записывается в output.log.stderr можно обработать отдельно:command > >(tee out.log) 2> >(tee err.log >&2)
Теперь
stdout и stderr разделены по разным log-файлам, но продолжают отображаться в терминале в реальном времени.Можно сразу передавать поток в другие команды:
make 2> >(grep error >&2)
Или обрабатывать и логировать вывод без временных файлов:
docker logs app > >(ts > app.log)
ts обычно входит в пакет moreutilsProcess substitution подключает pipe/FIFO или /dev/fd/* как обычный файл, поэтому данные обрабатываются потоково без временных файлов и без повторного запуска команды.При раздельной обработке
stdout/stderr порядок строк между потоками может отличаться от оригинального.🔥 Крутой механизм Bash для отладки, логирования и построения сложных shell-конвейеров.
🚪 Linux Ready | #совет
