Was macht tmux?
Verwendung für bestehende interaktive tmux-Sitzungen. Für einzelne Befehle die normale Shell verwenden. Für neue nicht-interaktive Hintergrundjobs die Hintergrundausführung nutzen.
Grundlagen
tmux ls
tmux list-windows -t shared
tmux list-panes -t shared:0
tmux capture-pane -t shared:0.0 -p
tmux capture-pane -t shared:0.0 -p -S -
Zielformat: Sitzung:Fenster.Bereich, z.B. shared:0.0.
Eingaben senden
Literal-Text, dann Enter:
tmux send-keys -t shared:0.0 -l -- "Bitte fortfahren"
tmux send-keys -t shared:0.0 Enter
Sondertasten:
tmux send-keys -t shared:0.0 C-c
tmux send-keys -t shared:0.0 C-d
tmux send-keys -t shared:0.0 Escape
Für beliebigen Text -l -- verwenden. Text und Enter trennen, um Einfüge-/Zeilenwechsel-Überraschungen zu vermeiden.
Sitzungen
tmux new-session -d -s worker
tmux rename-session -t old new
tmux kill-session -t worker
Eingabeaufforderungsprüfungen
tmux capture-pane -t worker-3 -p | tail -20
tmux capture-pane -t worker-3 -p | rg "proceed|permission|Yes|No|❯"
Bestätigen/Auswählen nur, wenn die Aufforderung verstanden wird:
tmux send-keys -t worker-3 -l -- "y"
tmux send-keys -t worker-3 Enter
Hilfsmittel
scripts/find-sessions.sh: Sitzungen entdecken.scripts/wait-for-text.sh: Warten, bis der erfasste Bereichs-Puffer den Text enthält.
wait-for-text.sh durchsucht sowohl die eingegebene Eingabe als auch den Scrollback sowie die Prozessausgabe. Für die Befehlserkennung einen eindeutigen Marker verwenden, dessen vollständiger Text auf die an tmux gesendeten Argumente verteilt ist:
nonce="$(od -An -N8 -tx1 /dev/urandom | tr -d ' \n')"
marker="OPENCLAW_DONE_${nonce}"
tmux send-keys -t shared:0.0 -l -- "sleep 4; printf '%s%s\n' 'OPENCLAW_DONE_' '$nonce'"
tmux send-keys -t shared:0.0 Enter
scripts/wait-for-text.sh -t shared:0.0 -p "$marker" -F -T 30
Der zurückgegebene Befehl enthält nie den vollständigen Marker, und die Nonce verhindert, dass eine ältere Abschlusszeile übereinstimmt.
Hinweise
capture-pane -pgibt auf stdout aus, geeignet für Skripte.-S -erfasst den gesamten Scrollback.- tmux-Sitzungen bleiben über SSH-Verbindungstrennungen hinweg erhalten.