👨💻 Bash может передавать большие объёмы данных между процессами без временных файлов
👨💻 Bash может передавать большие объёмы данных между процессами без временных файлов 👁 В автоматизации часто приходится связывать несколько утилит так, чтобы одна команда читала данные другой, а скрипт при этом сохранял возможность управлять обоими процессами. Для этого пригодится coproc — механизм Bash для запуска фонового процесса с двунаправленными каналами ввода-вывода. 📝 Запускаем долгоживущий обработчик: coproc позволяет отправлять данные процессу через файловый дескриптор и читать его ответы отдельно. Это удобно, когда дорого запускать обработчик заново для каждой строки. coproc WORKER { while IFS= read -r line; do printf 'Обработано: %s\n' "${line^^}" done } printf '%s\n' "nginx" "bash" "linux" >&"${WORKER[1]}" 📝 Читаем ответы, не блокируя поток данных вручную: У coproc есть дескрипторы для записи и чтения. Забирайте ответы по мере поступления, а не складывайте весь результат во временный файл. while IFS= read -r -t 1 line <&"${WORKER[0]}"; do printf 'Ответ: %s\n' "$line" done 📝 Корректно завершаем фоновый процесс: После передачи данных закройте канал записи, чтобы обработчик получил EOF и вышел из цикла. Затем дождитесь его завершения через wait. exec {WORKER[1]}>&- wait "$WORKER_PID" ❗️ Когда это полезно: для постоянных обработчиков, интерактивных утилит и конвейеров автоматизации, где нужно обмениваться данными без промежуточных файлов. Учитывайте, что чтение с -t может завершиться по тайм-ауту, а при закрытии дескрипторов важно не оставить процесс ожидающим ввода. tags: #bash #автоматизация 🧭 @recura_tech