Der 18. Waldwächter betritt den Wald: BashPanda lehrt Bash als Kampfkunst! ✨ Neue Features: 🐼 BashPanda Waldwächter: - Kung Fu Meister Persönlichkeit - Lehrt Bash durch Kampfkunst-Metaphern - Integriert in waldwaechter.sh Library - Crew Memory: Kennt alle anderen Waldwächter 🥋 6 Gürtel-Missionen (Progressive Bash-Meisterschaft): - 🖤 Schwarzer Gürtel: echo, Variablen, read, ANSI codes - 💖 Pinker Gürtel: if/then, while/for, Arrays, Arithmetik - 💙 Blauer Gürtel: sed, case, bc, Textverarbeitung - 💚 Grüner Gürtel: grep, regex, Pattern Matching - 💛 Gelber Gürtel: Funktionen, source, Parameter - 🤍 Weisser Gürtel: Background jobs, Prozesse, Parallelität 📝 Interaktives Quiz-System: - Browser-based Gürtelprüfung (crumbblocks) - 30 Fragen (5 pro Gürtel) - Farbcodiert nach Gürtel - Auto-Export via Clipboard - Terminal-Auswertung mit Zertifikaten 🎓 Zertifikate-System: - Automatische Generierung bei 80%+ - Gespeichert in logs/zertifikate/ - BashPanda's Segen & Weisheiten 📚 Dokumentation: - CLAUDE.md komplett aktualisiert - BashPanda als 18. Waldwächter dokumentiert - Vollständige Dojo-Architektur beschrieben "Der Weg des Codes ist wie der Weg der Kampfkunst: Geduld, Präzision, Wiederholung." - BashPanda 🐼🎋 Crumbforest wächst! 🌲 Der Wurzelbau geht weiter! 🌳 🤖 Generated with Claude Code (https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
314 lines
9.8 KiB
Bash
Executable File
314 lines
9.8 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# 🐼 BashPanda Dojo - Weisser Gürtel 🤍
|
|
# Lehrt: Background Jobs, Processes, ps, jobs, &
|
|
# Schwierigkeit: Meister
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
source "${SCRIPT_DIR}/../../lib/waldwaechter.sh"
|
|
|
|
cat << 'EOF'
|
|
|
|
╔═══════════════════════════════════════════════════════════╗
|
|
║ ║
|
|
║ 🐼 BASHPANDA DOJO - WEISSER GÜRTEL 🤍 ║
|
|
║ ║
|
|
║ "Der Meister kontrolliert nicht nur Code, ║
|
|
║ sondern auch Prozesse" ║
|
|
║ ║
|
|
╚═══════════════════════════════════════════════════════════╝
|
|
|
|
EOF
|
|
|
|
echo "🐼 BashPanda steht auf. Er verneigt sich als Ebenbürtiger."
|
|
echo "🥋 Du bist bereit für die letzte Lehre."
|
|
echo ""
|
|
|
|
cat << 'EOF'
|
|
Der Weisse Gürtel lehrt dich PROZESS-KONTROLLE.
|
|
|
|
Du wirst lernen:
|
|
🎯 & - Jobs im Hintergrund starten
|
|
🎯 jobs - Aktive Jobs anzeigen
|
|
🎯 ps - Prozesse anzeigen
|
|
🎯 kill - Prozesse beenden
|
|
🎯 wait - Auf Prozesse warten
|
|
|
|
"Ein Meister lässt Prozesse für sich arbeiten,
|
|
während er meditiert."
|
|
|
|
EOF
|
|
|
|
read -p "➡️ Bereit für die Meisterprüfung? (j/n): " start
|
|
[[ ! "$start" =~ ^[jJyY]$ ]] && echo "🐼 Der Weg endet nie." && exit 0
|
|
echo ""
|
|
|
|
# === PHASE 1: Background Jobs mit & ===
|
|
|
|
cat << 'EOF'
|
|
═══════════════════════════════════════════════════════════
|
|
📚 PHASE 1: & - Hintergrund-Prozesse
|
|
═══════════════════════════════════════════════════════════
|
|
|
|
Mit & startest du einen Prozess im Hintergrund.
|
|
Das Terminal bleibt frei für weitere Befehle.
|
|
|
|
EOF
|
|
|
|
echo "🐼 Live Demo:"
|
|
echo ""
|
|
|
|
echo "Starte: sleep 5 &"
|
|
sleep 5 &
|
|
JOB_PID=$!
|
|
echo "Job gestartet mit PID: $JOB_PID"
|
|
echo ""
|
|
|
|
echo "Terminal ist frei! Ich kann weiter arbeiten."
|
|
echo "Der Job läuft im Hintergrund..."
|
|
echo ""
|
|
|
|
cat << 'EOF'
|
|
💡 Background Syntax:
|
|
command & Starte im Hintergrund
|
|
$! PID des letzten Background-Jobs
|
|
jobs Zeige alle aktiven Jobs
|
|
fg %1 Bring Job 1 in Vordergrund
|
|
bg %1 Sende Job 1 in Hintergrund
|
|
|
|
EOF
|
|
|
|
# === PHASE 2: jobs & ps ===
|
|
|
|
cat << 'EOF'
|
|
═══════════════════════════════════════════════════════════
|
|
📚 PHASE 2: jobs & ps - Übersicht behalten
|
|
═══════════════════════════════════════════════════════════
|
|
|
|
EOF
|
|
|
|
echo "🐼 Demo: Mehrere Jobs starten"
|
|
echo ""
|
|
|
|
sleep 3 &
|
|
sleep 4 &
|
|
sleep 5 &
|
|
|
|
echo "jobs zeigt alle Jobs dieser Shell:"
|
|
jobs
|
|
echo ""
|
|
|
|
echo "ps zeigt alle deine Prozesse:"
|
|
ps aux | grep $USER | head -5
|
|
echo ""
|
|
|
|
cat << 'EOF'
|
|
💡 Prozess-Befehle:
|
|
jobs Jobs der aktuellen Shell
|
|
ps aux Alle Prozesse (detailliert)
|
|
ps aux | grep X Suche Prozess X
|
|
pgrep name Finde PID von Prozess
|
|
pkill name Beende Prozess nach Namen
|
|
|
|
EOF
|
|
|
|
# === PHASE 3: wait - Auf Prozesse warten ===
|
|
|
|
cat << 'EOF'
|
|
═══════════════════════════════════════════════════════════
|
|
📚 PHASE 3: wait - Synchronisation
|
|
═══════════════════════════════════════════════════════════
|
|
|
|
wait wartet bis ein Background-Job fertig ist.
|
|
|
|
EOF
|
|
|
|
echo "🐼 Live Demo:"
|
|
echo ""
|
|
|
|
cat << 'CODE'
|
|
echo "Starte Job..."
|
|
sleep 2 &
|
|
PID=$!
|
|
echo "Warte auf Job $PID..."
|
|
wait $PID
|
|
echo "Job ist fertig!"
|
|
CODE
|
|
|
|
echo ""
|
|
echo "Ausführung:"
|
|
echo "Starte Job..."
|
|
sleep 2 &
|
|
PID=$!
|
|
echo "Warte auf Job $PID..."
|
|
wait $PID
|
|
echo "✅ Job ist fertig!"
|
|
echo ""
|
|
|
|
cat << 'EOF'
|
|
💡 wait Verwendung:
|
|
wait Warte auf ALLE Background-Jobs
|
|
wait $PID Warte auf spezifischen Job
|
|
wait %1 Warte auf Job-Nummer 1
|
|
|
|
EOF
|
|
|
|
# === PHASE 4: Praktisches Beispiel ===
|
|
|
|
cat << 'EOF'
|
|
═══════════════════════════════════════════════════════════
|
|
📚 PHASE 4: Parallel Processing - Die Macht
|
|
═══════════════════════════════════════════════════════════
|
|
|
|
Mehrere Tasks parallel ausführen, dann auf alle warten.
|
|
|
|
EOF
|
|
|
|
echo "🐼 Demo: 3 Tasks parallel"
|
|
echo ""
|
|
|
|
cat << 'CODE'
|
|
function task() {
|
|
echo "Task $1 startet..."
|
|
sleep 2
|
|
echo "Task $1 fertig!"
|
|
}
|
|
|
|
task 1 &
|
|
task 2 &
|
|
task 3 &
|
|
|
|
wait
|
|
echo "Alle Tasks abgeschlossen!"
|
|
CODE
|
|
|
|
echo ""
|
|
echo "Ausführung:"
|
|
|
|
function task() {
|
|
echo "🥋 Task $1 startet..."
|
|
sleep 1
|
|
echo "✅ Task $1 fertig!"
|
|
}
|
|
|
|
task 1 &
|
|
task 2 &
|
|
task 3 &
|
|
|
|
wait
|
|
echo "🐼 Alle Tasks abgeschlossen!"
|
|
echo ""
|
|
|
|
# === DIE MEISTERPRÜFUNG ===
|
|
|
|
cat << 'EOF'
|
|
|
|
═══════════════════════════════════════════════════════════
|
|
🥋 MEISTERPRÜFUNG - WEISSER GÜRTEL 🤍
|
|
═══════════════════════════════════════════════════════════
|
|
|
|
Deine finale Aufgabe: Erstelle 'parallel_processor.sh'
|
|
|
|
Das Skript soll:
|
|
|
|
1. Eine Funktion 'process_file' definieren:
|
|
- Nimmt Dateiname als Parameter
|
|
- Zählt Wörter mit wc -w
|
|
- Schreibt Ergebnis in \${datei}.count
|
|
|
|
2. 5 Test-Dateien erstellen:
|
|
echo "Test Inhalt" > file1.txt
|
|
(für file1 bis file5)
|
|
|
|
3. Alle 5 parallel verarbeiten:
|
|
for file in file*.txt
|
|
do
|
|
process_file "$file" &
|
|
done
|
|
|
|
4. Mit wait auf alle warten
|
|
|
|
5. Ergebnisse ausgeben:
|
|
cat file*.count
|
|
|
|
Bonuspunkte:
|
|
- Nutze jobs um zu zeigen wie viele laufen
|
|
- Speichere PIDs in Array
|
|
- Prüfe mit $? ob Jobs erfolgreich waren
|
|
|
|
EOF
|
|
|
|
echo "💡 Dies kombiniert ALLES was du gelernt hast:"
|
|
echo " - Funktionen (Gelb)"
|
|
echo " - Arrays & Schleifen (Pink)"
|
|
echo " - Background Jobs & wait (Weiss)"
|
|
echo ""
|
|
|
|
read -p "Hast du die Meisterprüfung bestanden? (j/n): " pruefung
|
|
|
|
if [[ "$pruefung" =~ ^[jJyY]$ ]]; then
|
|
cat << 'EOF'
|
|
|
|
╔═══════════════════════════════════════════════════════════╗
|
|
║ ║
|
|
║ 🏆 MEISTERSCHAFT ERREICHT! 🏆 ║
|
|
║ ║
|
|
║ Du hast den WEISSEN GÜRTEL 🤍 verdient! ║
|
|
║ ║
|
|
║ DU BIST NUN EIN BASH-MEISTER! ║
|
|
║ ║
|
|
║ "Der Weg des Meisters endet nie. ║
|
|
║ Mit jedem Tag lernst du etwas Neues. ║
|
|
║ Lehre nun andere, was du gelernt hast." ║
|
|
║ ║
|
|
║ - BashPanda 🐼 ║
|
|
║ ║
|
|
╚═══════════════════════════════════════════════════════════╝
|
|
|
|
EOF
|
|
|
|
echo ""
|
|
echo "🥋 DEINE REISE DURCH DAS DOJO:"
|
|
echo ""
|
|
echo " 🖤 Schwarzer Gürtel: echo, Variablen, read"
|
|
echo " 💖 Pinker Gürtel: if/then, Schleifen, Arrays"
|
|
echo " 💙 Blauer Gürtel: sed, case, bc"
|
|
echo " 💚 Grüner Gürtel: grep, regex, Pattern"
|
|
echo " 💛 Gelber Gürtel: Funktionen, source"
|
|
echo " 🤍 Weisser Gürtel: Background Jobs, Prozesse"
|
|
echo ""
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
echo ""
|
|
echo "🌲 WILLKOMMEN IN DER CRUMBCREW! 🌲"
|
|
echo ""
|
|
echo " Du kannst nun:"
|
|
echo " - Alle 18 Waldwächter befehligen"
|
|
echo " - Eigene Bash-Skripte meistern"
|
|
echo " - Komplexe Missions im Crumbforest lösen"
|
|
echo ""
|
|
echo "🎯 Nächste Schritte:"
|
|
echo " - Erkunde missions/robots/ (Hardware-Projekte)"
|
|
echo " - Nutze ./crumb-mission-selector.sh (Option 9: CrumbCrew)"
|
|
echo " - Erstelle eigene Skripte und teile sie!"
|
|
echo ""
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
echo ""
|
|
echo "🐼 BashPanda sagt zum Abschied:"
|
|
echo ""
|
|
|
|
bashpanda "Was ist die Weisheit eines Bash-Meisters?"
|
|
|
|
else
|
|
cat << 'EOF'
|
|
🐼 "Der weisse Gürtel ist der Anfang, nicht das Ende.
|
|
Übe weiter. Der Weg des Meisters ist niemals vollendet."
|
|
|
|
EOF
|
|
fi
|
|
|
|
echo ""
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
echo "💬 bashpanda \"Was sind Background-Prozesse?\""
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
echo ""
|