TGViewer
BashTex | Linux BashTex | Linux @bash_tex · 2.51K subscribers
Post #582 811
Работа с дескрипторами файлов через exec: FD 3, 4, логирование и контроль потоков

В Bash обычно работают только с stdin (0), stdout (1) и stderr (2). Но файловые дескрипторы на этом не заканчиваются - можно использовать FD 3, 4 и выше для более гибкого управления потоками.

▪️Базовая идея

Каждый процесс имеет таблицу файловых дескрипторов:

0 → stdin
1 → stdout
2 → stderr


Но можно открыть дополнительные:

exec 3>debug.log


Теперь FD 3 пишет в файл debug.log.

▪️Разделение логов

Классический приём - разделить обычный вывод и отладку:

echo "normal output"
echo "debug info" >&3


Результат:
stdout остаётся чистым
debug уходит в отдельный файл

▪️Перенаправление команд через FD

Можно связать вывод команды с кастомным дескриптором:

exec 4< input.txt


Теперь FD 4 читает файл как поток.
Чтение:

read -u 4 line
echo "$line"


▪️Логирование через единый канал

Удобный паттерн - централизованный лог:
exec 3>>/var/log/myapp.log

log() {
echo "$(date '+%F %T') $*" >&3
}


Теперь все логи идут через FD 3, без захламления stdout.

▪️Почему это лучше обычного >> везде
единая точка управления логированием
проще отключать/перенаправлять вывод
можно динамически менять файл логов через exec

▪️Закрытие дескрипторов

exec 3>&-


FD освобождается, файл больше не удерживается процессом.

▪️Где это реально используется
сложные Bash-скрипты с несколькими потоками данных
системы логирования без внешних библиотек
обработка нескольких входных источников одновременно
изоляция debug/production вывода
FD выше 2 - это недооценённый инструмент, который превращает Bash из набора команд в полноценную систему управления потоками.

BashTex 📱 #scripts #linux
  • 👍 6
  • 🔥 1
More from @bash_tex
  1. Oct 7, 2026/dev/tcp - сетевое соединение средствами Bash В Bash есть малоизвестная возможность работа…
  2. Oct 6, 2026Ephemeral ports - почему заканчиваются исходящие TCP-порты Когда приложение устанавливает…
  3. Oct 5, 2026name_to_handle_at() - как получить файловый объект без обычного пути В Linux обычно обраща…
  4. Oct 2, 2026madvise() - как процесс подсказывает ядру, как он собирается использовать память Когда про…
  5. Oct 1, 2026flock vs fcntl - почему две блокировки одного файла могут вести себя совершенно по-разному…
  6. Sep 30, 2026DEBUG trap - как Bash выполняет код перед каждой командой В Bash есть специальный DEBUG tr…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →