👨💻 Bash может передавать большие объёмы данных между процессами без…
👨💻 Bash может передавать большие объёмы данных между процессами без временных файлов
👁 В автоматизации часто приходится связывать несколько утилит так, чтобы одна команда читала данные другой, а скрипт при этом сохранял возможность управлять обоими процессами. Для этого пригодится
📝 Запускаем долгоживущий обработчик:
📝 Читаем ответы, не блокируя поток данных вручную:
У
📝 Корректно завершаем фоновый процесс:
После передачи данных закройте канал записи, чтобы обработчик получил EOF и вышел из цикла. Затем дождитесь его завершения через
❗️ Когда это полезно: для постоянных обработчиков, интерактивных утилит и конвейеров автоматизации, где нужно обмениваться данными без промежуточных файлов. Учитывайте, что чтение с
tags: #bash #автоматизация
🧭 @recura_tech
👁 В автоматизации часто приходится связывать несколько утилит так, чтобы одна команда читала данные другой, а скрипт при этом сохранял возможность управлять обоими процессами. Для этого пригодится
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