TGViewer
BashTex | Linux BashTex | Linux @bash_tex · 2.51K subscribers
Post #586 585
coproc на практике: двусторонний обмен данными с процессом

В bash обычно все сводится к pipe: команда - команда. Но классический пайп односторонний. Если нужен диалог с процессом в обе стороны - используется coproc.

▪️ Что такое coproc. Он запускает процесс и даёт два канала:

stdin - в процесс
stdout - из процесса

И все это без временных файлов и костылей с FIFO.

▪️ Базовый пример


coproc BC { bc -l; }


Теперь у нас есть процесс калькулятора, с которым можно общаться.

Отправляем данные:


echo "2+2" >&"${BC[1]}"
read result <&"${BC[0]}"
echo "$result"


▪️ Как это устроено. После запуска bash создает массив:


${COPROC[0]} # stdout процесса
${COPROC[1]} # stdin процесса


Можно читать и писать независимо.

▪️ Реальный кейс: фоновый parser


coproc JSON { jq -c '.name'; }


Отправляем поток данных:


echo '{"name":"test"}' >&"${JSON[1]}"
read out <&"${JSON[0]}"
echo "$out"


▪️ Почему это лучше pipe Pipe работает так:


cmd1 | cmd2


Но:

• нет обратного канала
• процесс заканчивается сразу
• нельзя поддерживать состояние

coproc позволяет держать живой процесс и общаться с ним как с сервисом.

▪️ Важный момент. Процесс внутри coproc не перезапускается автоматически. Если он завершился - каналы перестают работать, и это нужно проверять вручную.

▪️ Где это реально полезно

• интерактивные CLI-инструменты (bc, python, sqlite3)
• долгоживущие парсеры (jq, awk, кастомные демоны)
• проксирование данных между процессами
• построение "мини-сервисов" прямо в Bash

coproc превращает bash из набора команд в примитивную систему IPC, где процессы начинают вести диалог, а не просто передавать поток данных в одну сторону.

BashTex 📱 #bash #scripts
  • 👍 7
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 →