tmux-Äquivalent von "screen -R"?


10

Der tmux attachBefehl verhält sich eher wie eine Kombination aus screen -rund screen -x- zuerst wird versucht, eine Verbindung zur zuletzt getrennten Sitzung herzustellen. Wenn keine verfügbar ist, wird eine Verbindung zu einer aktuell angehängten Sitzung hergestellt. Ich möchte das folgende Verhalten emulieren screen -R: Versuchen Sie zunächst, eine Verbindung zu einer getrennten Sitzung herzustellen, und starten Sie dann eine neue Sitzung, wenn keine getrennten Sitzungen vorhanden waren. Was ist der beste Weg, um dies in tmux zu erreichen?

Antworten:


12

Nach Rücksprache mit den IRC-Assistenten bin ich überzeugt, dass es keinen einzigen tmux-Befehl gibt, der dieses Verhalten aufweist. Glücklicherweise ist es ziemlich einfach, mit der Shell zu emulieren:

(tmux ls | grep -vq attached && tmux at) || tmux

Kleinere Änderungen, um die Ausgabe "Verbindung zum Server fehlgeschlagen: Verbindung abgelehnt" zu (tmux ls 2>/dev/null | grep -vq attached && tmux at) || tmux
unterdrücken,

3

Trotz allem, was im tmux-Handbuch steht:

             The target-session rules for attach-session are slightly
         adjusted: if tmux needs to select the most recently used session,
         it will prefer the most recently used unattached session.

Drews Antwort funktioniert in einer Situation wie der folgenden nicht richtig:

0: 1 windows (created Wed Nov  7 23:51:08 2012) [177x47]
1: 1 windows (created Wed Nov  7 23:51:33 2012) [177x47] (attached)

tmux atwird an die letzte Sitzung angehängt (# 1) (obwohl diese Sitzung noch an einer anderen Stelle angehängt ist). Dies ruiniert die ganze Idee, mehrere tmux-Sitzungen auszuführen und nur an eine getrennte anzuschließen (um mit mosh + tmux + iterm2 ein perfektes Roaming-Terminal zu erstellen).

Ein anderer Ansatz wäre die manuelle Auswahl einer nicht angehängten Sitzung:

tmux ls | grep -vq attached && tmux at `tmux ls | grep -vm1 attached | cut -d: -f1`


Guter Fang! Die Dokumentation stimmt nicht mit dem tatsächlichen Verhalten überein. Ich habe dafür einen Fehlerbericht erstellt .
Drew Frank

Es ist ein Patch erschienen, der dies behebt. Bis zur nächsten Version sollte er sich wie angekündigt verhalten.
Drew Frank

Ist der Patch in 1.8?
Momeara

2

Ich habe normalerweise nur zwei tmux-Sitzungen gleichzeitig, also mache ich so etwas in jedem Terminalfenster.

Terminalfenster 0:

tmux attach -t 0 || tmux new

Terminalfenster 1:

tmux attach -t 1 || tmux new

2

Das hat bei mir am besten funktioniert:

if [ -z "$TMUX" ]; then
     (tmux ls | grep -vq attached && tmux at -t `tmux ls | grep -vm1 attached | cut -d: -f1`) || tmux new
fi

Das -t wird benötigt, um eine Verbindung zur richtigen Sitzung herzustellen.


1

Wie wäre es mit

tmux attach || tmux new

oder erstellen ~/.tmux.confSie stattdessen einfach die Datei, falls sie nicht vorhanden ist, und fügen Sie sie hinzu

new-session

dazu, dass es eine neue Sitzung erstellt, wenn beim Ausführen keine vorhanden ist tmux attach.

Es kann auch nützlich sein, tmuxeinen Alias ​​zu erstellen tmux attach.


Der erste Vorschlag würde an aktuell angehängte tmux-Sitzungen (ähnlich wie screen -x) angehängt, was ich vermeiden möchte. Der zweite Vorschlag weist dasselbe Problem auf und hat auch die unerwünschte Folge, dass "zusätzliche" tmux-Sitzungen erstellt werden, wenn ich den Befehl tmux source-file zum erneuten Laden der Konfiguration verwende.
Drew Frank
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.