🚀 Lehrpfad 3: High-Performance & Parallelisierung

Bash 10: Prozess-Substitution & Co-Prozesse

Nutze Linux-IPC wie ein Meister: Prozess-Substitution <(...), Stream-Fächerung >(...), Named Pipes (mkfifo) und interaktive Co-Prozesse (coproc).

🔄 1. Virtuelle Streams mit <(...) und >(...)

Prozess-Substitution verwandelt die Ausgabe eines Befehls in einen temporären Dateideskriptor (/dev/fd/XX). Dadurch können Befehle, die Dateien erwarten, direkt mit Streams arbeiten:

diff -u  <(cat remote_host_a.json)  <(cat remote_host_b.json)
            â”‚                         â”‚
            â–¼                         â–¼
        [/dev/fd/63]              [/dev/fd/62]
            â””─────────▶ [ diff ] ◀─────────┘
# 🎯 Dateien ohne Zwischenspeichern vergleichen:
diff -u <(curl -s https://api.a.com/status) <(curl -s https://api.b.com/status)

# 🎯 Gleichzeitig in Datei und Filter-Pipe schreiben:
echo "Incoming Request" | tee >(logger -t "APP") > access.log

🧵 2. Interaktive Co-Prozesse (coproc) & Named Pipes (mkfifo)

Wenn dein Skript mit einem Hintergrundprozess im Ping-Pong-Verfahren Daten austauschen muss, sind Co-Prozesse das mächtigste Werkzeug:

# 🤖 Co-Prozess im Hintergrund starten:
coproc CALC {
    while read -r expr; do
        [ "$expr" = "QUIT" ] && break
        echo "$((expr))"
    done
}

# 📤 Senden an coproc:
echo "10 + 20" >&"${CALC[1]}"

# 📥 Empfangen von coproc:
read -r antwort <&"${CALC[0]}"
echo "Ergebnis: $antwort" # 30
📻 Didaktische Analogie: Das Walkie-Talkie für Prozesse

Standard-Pipes (|) sind wie eine Einbahnstraße (Wasserrohr). Ein Co-Prozess ist wie ein Walkie-Talkie mit zwei Kanälen: Kanal 1 (${NAME[1]}) zum Sprechen/Senden und Kanal 0 (${NAME[0]}) zum Hören/Empfangen!

📑 3. Cheat-Sheet: IPC & Prozess-Substitution

Syntax Typ Einsatzzweck
<(cmd) Process Substitution (Read) Befehlsausgabe als virtuelle Datei lesen
>(cmd) Process Substitution (Write) Datenstrom an Befehlseingabe leiten
mkfifo /tmp/pipe Named Pipe (FIFO) Dateisystem-Puffer zwischen unabhängigen Skripten
coproc NAME { ... } Co-Prozess Bidirektionaler Hintergrund-Daemon in Bash
>&"${NAME[1]}" File Descriptor Write In stdin des Co-Prozesses schreiben

🧠 Diagnostischer Selbst-Check

Überprüfe dein Verständnis der Kernkonzepte und typischen CLI-/Git-Fallen, bevor du die Kommandos in der Praxis anwendest.

🎯 Aufgaben & Checkliste in aufgabe.sh

💻 In Web-IDE öffnen → ← Zurück zu Bash 09 Weiter zu Bash 11 →