socat позволяет связать любой источник данных с любым приемником. Bash-скрипты с ним превращаются в гибкие системы обмена сообщениями.▪️ Bash через UNIX-сокет. Мини-IPC без tmp-файлов и named pipes:
Сервер:
socat UNIX-LISTEN:/tmp/app.sock,fork SYSTEM:'bash handler.sh'
Клиент:
echo "PING" | socat - UNIX-CONNECT:/tmp/app.sock
Отлично подходит для локальных API между скриптами.
2️⃣ Передача данных между серверами (TCP)
Сервер:
socat TCP-LISTEN:9000,fork FILE:/var/log/app.log
Клиент:
socat - TCP:server:9000
Можно в реальном времени стримить логи или метрики.
3️⃣ Замена сложных пайпов. Напрямую соединяем процессы, даже если они не умеют работать с stdin/stdout:
socat EXEC:"cmd1" EXEC:"cmd2"
Аналог cmd1 | cmd2, но без ограничений пайпа (например, поддержка bidirectional).
4️⃣ Двунаправленный канал в скрипте. Например, общение с интерактивным сервисом:
socat - TCP:localhost:8080 | while read l; do
echo ">> $l"
done
Можно строить собственные протоколы поверх TCP.
5️⃣ Быстрый импровизированный RPC
Сервер:
socat TCP-LISTEN:7000,reuseaddr,fork SYSTEM:'bash rpc-handler.sh'
Клиент:
echo '{"cmd":"status"}' | socat - TCP:host:7000
BashTex 📱 #bash #utils