it-swarm.com.de

Wie trenne ich eine tmux-Sitzung, die sich bereits in einem tmux befindet?

Ich habe eine tmux-Sitzung auf meinem lokalen Computer und ssh auf dem Remote-Computer geöffnet. Danach habe ich den Befehl "tmux attach" auf dem entfernten Rechner eingegeben und dann eine entfernte tmux-Sitzung in meiner lokalen tmux-Sitzung gestartet.

Jetzt möchte ich die Remote-tmux-sesstion trennen, ich habe es versucht

C-b d

aber es löste meine lokale TMUX-Sitzung und nicht die Remote-Sitzung.

Wie kann ich die Remote-tmux-sesstion trennen?

101
superadmin
C-b C-b d

(unter der Annahme von Standardbindungen)

Das erste C-b wird von Ihrem lokalen tmux interpretiert (weil es das erste ist, das alle Ihre Tastenanschläge sieht). Das zweite C-b ist ein Befehl, der Ihren lokalen tmux veranlasst, ein C-b an seinen aktiven Bereich zu senden; dies erzeugte C-b kommt am entfernten tmux an. Das d durchläuft den lokalen tmux unverändert; Wenn es an die entfernte tmux gelangt, löst es den Befehl detach aus.

  1. Sie geben C-b ein.
    Ihr lokaler tmux interpretiert ihn als Präfixschlüssel; Es wird nichts an die Prozesse gesendet, die unter tmux laufen.
  2. Sie geben C-b ein.
    Ihr lokales tmux hat es an den Befehl send-prefix gebunden.
    1. Ihr lokaler tmux sendet ein C-b an den Prozess, der im aktiven Bereich ausgeführt wird ( ssh ).
    2. ssh leitet es (über sshd usw.) an den Prozess weiter, der auf der Remote-Seite ausgeführt wird (remote tmux ).
      Ihre Fernbedienung tmux interpretiert es als Präfixschlüssel; Es wird nichts an die Prozesse gesendet, die unter tmux ausgeführt werden.
  3. Sie geben d ein.
    Ihr lokaler tmux durchläuft es normal (da der zweite C-b eine vollständige Befehlstastenfolge für den lokalen tmux abgeschlossen hat).
    Ihre Fernbedienung tmux hat es an detach-client gebunden; Der aktive Client wird getrennt.

Dies ist dasselbe, wie wenn Sie ein C-b an ein beliebiges Programm senden müssen, das in einer tmux -Sitzung ausgeführt wird. Wenn Sie Cb an Ihre normale Shell senden möchten (z. B. weil Ihre Shell Emacs-ähnliche Bearbeitung verwendet, wobei Cb backward-char ist (und Sie die Pfeiltasten nicht mögen)), müssen Sie verwenden Cb Cb um ein einzelnes Cb in die Shell zu bekommen.

146
Chris Johnsen

Eine andere Möglichkeit, dies zu tun, ohne sich Gedanken über die Tastenkombinationen zu machen, die es zur richtigen tmux-Instanz machen, besteht darin, in der Remote-tmux-Sitzung tmux detach einzugeben.

43
Dave Wongillies

Ich habe die erste Antwort ohne Erfolg versucht.

Mit den folgenden Schritten konnte ich die gewünschten Ergebnisse erzielen:

tmux attach

Ich trat in tmux ein und sah, dass die andere Sitzung noch angehängt war

Also habe ich meine aktuelle Sitzung getrennt, um zu einer Shell zurückzukehren: Ctrl + b; d

Dann habe ich folgendes ausgegeben: tmux attach -d

Hiermit wird festgelegt, dass eine Verbindung zur Standardsitzung hergestellt und alle anderen derzeit verbundenen Sitzungen getrennt werden sollen. Siehe die Manpage unter Clients and Sessions

attach-session [-dr] [-t Zielsitzung] (Alias: attach) Wenn Sie von außerhalb von tmux ausgeführt werden, erstellen Sie einen neuen Client im aktuellen Terminal und hängen Sie ihn an die Zielsitzung an. Bei Verwendung von innen wechseln Sie den aktuellen Client. Wenn -d angegeben wird, werden alle anderen an die Sitzung angeschlossenen Clients getrennt. -r bedeutet, dass der Client schreibgeschützt ist (nur an den Befehl detach-client gebundene Schlüssel haben eine Auswirkung)

8
bobby

Wenn Sie eine andere Option ausprobieren möchten, gehen Sie wie folgt vor

  1. aktuelle tmux-Sitzung mit Ctrl+b d trennen. Damit gehst du jetzt zur normalen Terminalbefehlszeile Prompt.
  2. Mach einen tmux ls. Suchen Sie nach der aktuell angehängten Sitzung
  3. Führen Sie diesen Befehl aus, um die bereits angehängte Sitzung zu trennen. tmux detach-client -s <attached_session_name>
0
Ram