2011-02-24 03:10:27 +0000 2011-02-24 03:10:27 +0000
128
128

Wie löst man eine tmux-Sitzung, die sich bereits in einem tmux befindet?

Ich habe eine tmux-Sitzung auf meinem lokalen Rechner geöffnet und mich per ssh mit dem entfernten Rechner verbunden. Danach habe ich den Befehl “tmux attach” auf dem entfernten Rechner eingegeben, dann habe ich eine entfernte tmux-Sitzung auf meiner lokalen tmux-Sitzung erhalten.

Jetzt möchte ich die entfernte tmux-Sitzung trennen, ich habe es mit

C-b d

versucht, aber es hat meine lokale tmux-Sitzung getrennt und nicht die entfernte.

Wie kann ich die entfernte tmux-Sitzung trennen?

Antworten (4)

172
172
172
2011-02-24 04:21:36 +0000
C-b C-b d

(unter Annahme der Standardbindungen)

Das erste C-b wird von Ihrem lokalen tmux interpretiert (weil er als erster alle Ihre Tastendrücke sieht). Das zweite C-b ist ein Befehl, der Ihren lokalen tmux veranlasst, ein C-b an sein aktives Fenster zu senden; dieses erzeugte C-b kommt am entfernten tmux an. Der d durchläuft den lokalen tmux unverändert; wenn er am fernen tmux ankommt, löst er den Befehl detach aus.

  1. Sie geben C-b ein.
    Ihr lokaler tmux interpretiert es als Präfixschlüssel; an die Prozesse, die unter dem lokalen tmux laufen, wird nichts gesendet.
  2. Sie geben C-b ein.
    Ihr lokaler tmux hat es an den Befehl send-prefix gebunden.
  3. Ihr lokaler tmux sendet ein C-b an den Prozess, der unter dem aktiven Fenster (ssh) läuft.
  4. ssh leitet es (über sshd usw.) an den Prozess weiter, der auf der entfernten Seite läuft (entfernter tmux).
    Ihr entfernter tmux interpretiert es als Präfixschlüssel; an die Prozesse, die unter dem entfernten tmux laufen, wird nichts gesendet.
  5. Sie geben d ein.
    Ihr lokaler tmux lässt es normal durch (da das zweite C-b eine vollständige Befehlstastenfolge für den lokalen tmux beendet).
    Ihr entfernter tmux hat es an detach-client gebunden; er trennt den aktiven Client.

Dies ist dasselbe wie wenn Sie ein C-b an ein beliebiges Programm senden müssen, das innerhalb einer tmux-Sitzung läuft. Wenn Sie C-b an Ihre normale Shell senden wollten (z. B. weil Ihre Shell eine Bearbeitung im Emacs-Stil verwendet, bei der C-b backward-char ist (und Sie nicht gerne die Pfeiltasten verwenden)), müssten Sie C-b** C-b** verwenden, um ein einzelnes C-b an die Shell zu senden.

51
51
51
2011-09-24 12:00:19 +0000

Eine andere Möglichkeit, ohne sich Gedanken darüber zu machen, ob die Tastenkombinationen an die richtige tmux-Instanz gelangen, ist die Eingabe von tmux detach in der entfernten tmux-Sitzung.

8
8
8
2013-01-21 16:43:49 +0000

Ich habe die erste Antwort ohne Erfolg ausprobiert.

Ich konnte die gewünschten Ergebnisse erzielen, indem ich Folgendes tat:

tmux attach

Ich rief tmux auf und sah, dass die andere Sitzung immer noch angehängt war

Also löste ich meine aktuelle Sitzung, um zu einer Shell zurückzukehren: Ctrl + b; d

Dann gab ich Folgendes aus:tmux attach -d

Dies besagt, dass die Standardsitzung angehängt wird und alle anderen Sitzungen, die derzeit angehängt sind, gelöst werden. Siehe die Manpage unter Clients und Sitzungen

attach-session [-dr] -t target-session Wenn von außerhalb von tmux ausgeführt, wird ein neuer Client im aktuellen Terminal erstellt und an target-session angehängt. Wenn von innen verwendet, wechselt der aktuelle Client. Wenn -d angegeben wird, werden alle anderen an die Sitzung angehängten Clients abgetrennt. -r bedeutet, dass der Client schreibgeschützt ist (nur an den Befehl detach-client gebundene Tasten haben eine Wirkung).

0
0
0
2018-03-12 06:28:47 +0000

Wenn Sie eine andere Option ausprobieren möchten, führen Sie die folgenden Schritte aus

  1. Trennen Sie die aktuelle tmux-Sitzung mit Ctrl+b d , so dass Sie nun zur normalen Terminal-Befehlszeile gelangen.
  2. Führen Sie tmux ls aus. Suchen Sie nach der aktuellen Sitzung
  3. Führen Sie diesen Befehl aus, um die bereits angehängte Sitzung zu trennen tmux detach-client -s <attached_session_name>