Nachdem ich kürzlich tmux und Tmuxinator entdeckt habe, habe ich versucht, eine Entwicklungsumgebung für die Verwendung einzurichten.
Gemäß Protokoll dürfen wir Passwörter / Passphrasen nicht in Skripten speichern. Also, was ich suche, ist ein Warten auf tmux, bis der SSH-Tunnel eingerichtet ist (Passwort eingegeben, gedrückt und angemeldet).
Ich weiß, dass es in tmux 1.8+ einen "wait-for" -Befehl gibt. Ich verwende 1.9a über Cygwin. Aber obwohl ich die Dokumentation durchgelesen habe, fällt es mir schwer, sie zu verstehen.
tmux new-session -s development -n editor -d
tmux split-window -v
tmux split-window -v
"Need to send to all panes.
tmux send-keys -t development 'ssh [email protected]' C-m
Hier ist eine sehr einfache Version von dem, was ich habe.
Gedanken? Ich weiß, dass ich Sessions synchronisieren kann.
Bearbeiten : Befehle untersuchen und Variablen aus dem Bereich aus synchronisierten Bereichen in den Befehl ziehen. Dies könnte ein "besserer" Weg sein, bis ich herausfinden kann, wie ich TMUX dazu bringen kann, mich zur Benutzereingabe aufzufordern.
Könnte eine Funktionsanforderung ausstellen.
~/.ssh/config
Datei: PutHost foo
,User user
undHostname example.com
an drei aufeinander folgenden Zeilen in der Konfigurationsdatei. Dannssh foo
wird gleichbedeutend mitssh [email protected]
. // Vielleicht hilft auch so etwas:command-prompt -p 'log in as:' -I '[email protected]' 'split-window -v -d %1; split-window -v -d %1'
Antworten:
Einige Notizen von
wait-for
Die grundlegende Verwendung von Wait-for ist also nicht allzu kompliziert, wenn Sie es als analog zum Threading von Concurrency-Primitiven ansehen
Es ist nicht wirklich mit anderen tmux-Funktionen verbunden, sondern lediglich eine praktische Implementierung von IPC.
wait-for event_name
ist wie das Warten auf ein Ereigniswait-for -S event_name
ein Mittel, um ein Ereignis zu signalisierenDie Optionen
-U
und-L
sind orthogonal und wirken wie SemaphorenBeantworten Sie Ihre Frage direkt
Sie können diese Art von Racebedingung
wait-for
nur dann lösen , wenn die Befehle synchron sind.Das Problem, das Sie hier haben, ist, dass der Befehl ssh nicht synchron ist: Sie können nicht feststellen, wann er beendet ist.
Wenn wir das Handbuch durchsehen, finden wir die
LocalCommand
Anweisung, die zu tun scheint, was wir wollen: Führen Sie einen Befehl lokal aus, nachdem die Verbindung hergestellt wurde, damit wir ihn aufrufen könnenquelle
channel
nur ein Name in einem eigenen Namespace ist und nichts mit den vordefinierten "Ereignissen" von tmux zu tun hat?wait-for -S
die Zustellung der Nachrichten und diesync-command
vorherigen Ergebnisse nicht garantiert werdenwait-for
.