Шпаргалка: направлять stdout и stderr в правильном порядке
Проследите дескрипторы 0, 1 и 2, различайте замену файла и добавление и разберите порядок перенаправлений Bash на безопасном потоке.
Когда открыть эту шпаргалку
Перенаправление выполняет оболочка до запуска программы. Оно может открыть или обнулить файл даже тогда, когда сама программа затем завершится ошибкой. Порядок операторов имеет значение: дублирование дескриптора фиксирует его назначение в данный момент.
Выбор команды
В таблице cmd — обозначение команды, а не готовая утилита. Для вывода в файл выбирайте отдельный путь, содержимое которого допустимо заменить.
| Что выяснить | Команда или выражение | Как читать результат |
|---|---|---|
| Подать файл на stdin | cmd < input.txt | Дескриптор 0 читает файл. |
| Заменить файл результатом | cmd > output.txt | Дескриптор 1; прежнее содержимое назначения обнуляется. |
| Добавить stderr | cmd 2>> errors.log | Открывается режим добавления для дескриптора 2. |
| Объединить два потока в файл | cmd > combined.log 2>&1 | Сначала stdout направлен в файл, затем stderr дублирует его. |
| Сохранить только stdout в файл | cmd 2>&1 > only-output.log | stderr остаётся направлен туда, куда stdout смотрел до перенаправления. |
Короткая последовательность
Группа отправляет одну строку в stdout и другую в stderr. Только stdout проходит через pipeline в wc; файловые назначения отсутствуют.
{ printf 'result\n'; printf 'diagnostic\n' >&2; } | wc -lПроверка вывода
wc должен посчитать одну строку, а diagnostic остаётся в stderr. Очередность отображения этих двух частей не является надёжным порядком событий: разные потоки могут буферизоваться независимо.
Границы применения
Конструкция 2>&1 копирует направление дескриптора, а не создаёт вечную связь с будущими изменениями stdout. Не используйте один файл одновременно как вход и назначение через >. Применение tee также требует понимания перезаписи и статусов звеньев.
Технические источники
Использованы для проверки поведения. Объяснения и учебные сценарии созданы для проекта.
- Руководство bash(1)
- Руководство pipe(7)
Проверка текста: 2026-09-11. Нативное исполнение на всей матрице дистрибутивов ещё не подтверждено.
Примеры для собственной Linux-системы с Bash и указанными утилитами. Наличие пакетов и набор опций проверьте в установленной версии; браузерный терминал поддерживает только своё подмножество.
От материала к практике
Выберите следующую тему в каталоге Linux или проверьте знакомые команды в учебном терминале.