Новое Распределяем каналы MAX по категориям и территориям. Читать новость

👨‍💻 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
Просмотры: 225
Открыть в MAX Сообщить о неточности

Сообщить о неточности

Опишите, что нужно исправить. Если есть источник, добавьте ссылку.

Вы покидаете datool.ru

Ссылка ведёт на внешний сайт. datool.ru не отвечает за его содержимое — проверьте адрес, прежде чем вводить пароли или платёжные данные.

Переход через 10 с

Перейти