Gibt es eine einfache Möglichkeit, einen tmux-Bereich neu zu starten?

47

Angenommen, ich habe ein tmux(1.7) Fenster wie folgt aufgeteilt:

 ________________________
|           1            |
|                        |
|-----------+------------|
|     2     |      3     |
|___________|____________|

Jetzt wurden die vertikalen Größen angepasst, sodass dies keineswegs zu den Standardlayouts gehört.

Wenn ein Programm hängen bleibt oder Sie einen Computer neu starten, über den Sie eine Verbindung hergestellt haben ssh, "hängt" der Bereich. Dh nichts anderes kill-panescheint zu funktionieren.

Da es jedoch keine einfache Möglichkeit gibt, die geteilte Konfiguration wiederherzustellen, nachdem Teilfenster Nr. 1 kill-panegeöffnet wurde, möchte ich es "neu starten".

0xC0000022L
quelle

Antworten:

81

Als respawn-paneich mir das Handbuch ansah, fiel mir der Befehl auf, aber es stellte sich heraus, dass dies nicht funktionierte. Bei näherer Betrachtung stellte sich heraus, dass dies respawn-pane -kdie Antwort war, da es den laufenden Befehl töten würde .

Auf diese Weise kann ein Fenster "neu gestartet" und neu erstellt werden.

Also <prefix>+ :und dann eingeben respawn-pane -kund drückenEnter

0xC0000022L
quelle
4
Oder verwenden Sie ohne, -kwenn Sie das Fenster im remain-on-exitModus erstellt und den Befehl selbst beendet haben.
Peterph
du hast worden neu hervorgebracht, amen
cambunctious
4

Tatsächlich gibt es eine Möglichkeit, ein Layout neu zu list-windowserstellen. Sie erhalten eine Layoutbeschreibung für alle Fenster in einer Sitzung und select-layoutkönnen die Zeichenfolge analysieren und das Layout entsprechend einstellen (siehe select-layoutin der Manpage tmux(1)).

Was Ihr SSH-Problem betrifft - SSH-Server sollten die Verbindung nach dem Herunterfahren des Systems schließen (obwohl ich einige Linux-Distributionen gesehen habe, die das richtige Verhalten irgendwie durcheinander bringen, indem sie den SSH-Dämon nicht herunterfahren und Sitzungen ordnungsgemäß ausführen) - wenn dies der Fall ist, Lesen Sie den ESCAPE CHARACTERSAbschnitt (und andere Stellen, die darauf verweisen) im ssh(1)Escape-Zeichen, gefolgt von .(einem Punkt), der die Verbindung auf der Clientseite zwangsweise beendet. Natürlich hilft es nicht, wenn Sie das Fenster beim sshAusführen gerade erst erzeugt haben, aber wenn das Problem häufiger auftritt, möchten Sie vielleicht lieber eine Shell im Fenster ausführen und ssh von dort aus aufrufen.

peterph
quelle
Ich habe Ihre Antwort positiv bewertet, weil sie einen Mehrwert bietet. Aber hier ist der Grund, warum die Escape-Zeichen nicht unbedingt eine gute Idee sind: Verwenden einer ssh-Sitzung, um eine Verbindung zu einer tmux-Sitzung herzustellen, die offene ssh-Verbindungen hat. Dann müssen Sie plötzlich darüber nachdenken, wie Sie das Escape-Zeichen über die erste SSH-Verbindung hinaus senden können, um die innere (n) Verbindung (en) zu erreichen. Und übrigens starte ich normalerweise ssh von einer Shell aus.
0xC0000022L
1
So ziemlich dasselbe wie bei geschachtelten tmux-Sitzungen. Entweder haben Sie in der äußeren und inneren Sitzung unterschiedliche Escape-Zeichen (ssh oder tmux eins) oder Sie senden das Escape-Zeichen einfach zweimal - wodurch es als einzelnes in die verschachtelte Sitzung eingeht (fest verdrahtetes Verhalten für ssh, konfigurierbar) in tmux).
Peterph