Gibt es ein tmux-Äquivalent von "screen -D -R"

13

Ich würde gerne wissen, ob es eine Möglichkeit gibt, sich so tmuxzu verhalten, wie screen -D -Rich sagen könnte, den Befehl als Standardbefehl in Putty zu haben.

Diese screenSchalter würden das Trennen einer vorhandenen Bildschirmsitzung für meinen Benutzer erzwingen (selbst wenn diese noch aktiv und an einer anderen Stelle angemeldet war) und sie erneut mit der aktuellen Sitzung verbinden. Für den Fall, dass keine Bildschirmsitzung vorhanden ist, wird eine neue erstellt.

Ich mag tmux und sehe klare Vorteile über dem Bildschirm, aber die Existenz dieser Funktion würde den Deal wirklich besiegeln.

tmux attach scheint keine neue Sitzung zu erstellen, wenn es keine gibt.

Die Manpage für tmux sagt:

Wenn kein Server gestartet ist, versucht attach-session (attach), ihn zu starten. Dies schlägt fehl, es sei denn, Sitzungen werden in der Konfigurationsdatei erstellt.

Was bedeutet der fett gedruckte Abschnitt? (Ich kann kein Beispiel für das Erstellen einer Sitzung in der conf-Datei finden.)

Geeb
quelle
Aus der Manpage: „ Die Konfigurationsdatei ist ein Satz von tmuxBefehlen , die nacheinander ausgeführt werden , wenn der Server zum ersten Mal gestartet wird. “ - Sie tatsächlich haben könnten attachoder new-sessionals Linie in Ihrem .tmux.conf.
Sr_
@sr_ Nun, der Zeitpunkt, an dem der Server zum ersten Mal gestartet wird, new-sessionwäre sowieso passiert ...
Chris Down
Habe gerade diese (geschlossene) Frage zu SO gefunden. Gleiche Frage mit ähnlichen Antworten. stackoverflow.com/q/3432536/168034
phunehehe

Antworten:

15

Ja:

$ tmux attach -d || tmux new

-dist notwendig, um sich wie screen -Djeder andere zu verhalten .

Per ssh verbinden, dann anhängen oder erstellen könnte so etwas sein:

$ cat bin/stmux
#!/bin/sh
exec ssh -t $@ 'tmux attach -d || tmux new'

$ stmux my.remote.box
mmoya
quelle
1
Ja - dies scheint der effektivste Weg zu sein, um das zu erreichen, was ich verlangt habe. Ebenso new-sessionlehne ich in der Konfigurationsdatei ab, falls Sie es bearbeiten und während einer tmux-Sitzung neu laden möchten.
Geeb
4

tmux attachVerwenden Sie die Option new-sessionin der tmux-Konfigurationsdatei , um eine neue Sitzung zu erstellen, wenn es keine gibt . Erstellen Sie die Datei, ~/.tmux.conffalls sie nicht vorhanden ist, und fügen Sie sie hinzu

new-session

dazu. Auch ich alias tmuxan tmux attach:)

phunehehe
quelle
1
Ich ziehe es nicht haben , new-sessionin ~/.tmux.confdenn wenn ich die Konfiguration mit dem Befehl neu zu laden source-file ~/.tmux.conf(siehe diese ) eine neue Sitzung gestartet wird. Ja, ich kann es töten und dann an das vorherige anhängen, aber das ist ein bisschen nervig.
mmoya
3

Sie können dies mit einer Shell-Funktion emulieren. Dies sollte für jede POSIX-kompatible Shell funktionieren:

tmux() {
    if [ "$#" -ge 1 ] && [ "$1" = -z ]; then
        shift
        command tmux detach 2>/dev/null
        command tmux attach "$@" || command tmux new-session "$@"
    else
        command tmux "$@"
    fi
}

Wenn Sie es nun wie folgt starten tmux -z, sollte es die gewünschten Aktionen ausführen.

Chris Down
quelle
2

dieses funktioniert ein bisschen besser für mich:

tmux new-session -AD -s <session-name>
ZA
quelle
1

Ich finde, das funktioniert am besten für mich auf .bashrc

if [[ -z $TMUX ]]; then
  tmux attach-session || tmux new-session
fi
user2451432
quelle
Wie erklärt das den fetten Abschnitt im OP?
Anthon
0

Wenn Sie dies in einer .shrc-Datei oder ähnlichem verwenden, execwürde ich empfehlen

if tmux ls
  exec tmux attach
else
  exec tmux
fi
Aaron J Lang
quelle