Czy istnieje odpowiednik tmux „screen -D -R”

13

Chciałbym wiedzieć, czy istnieje sposób, aby się tmuxzachowywać screen -D -Rtak, żebym mógł powiedzieć, że polecenie to jako polecenie domyślne w Putty.

Te screenprzełączniki wymusiłyby odłączenie istniejącej sesji ekranowej dla mojego użytkownika (nawet jeśli była ona nadal aktywna i zalogowana gdzie indziej) i ponownie dołączyła ją do bieżącej sesji. Ponadto, w przypadku braku sesji ekranowej, utworzy nową.

Lubię tmux i widzę wyraźne zalety w stosunku do ekranu, ale istnienie tej funkcji naprawdę przypieczętuje umowę.

tmux attach nie wydaje się tworzyć nowej sesji, jeśli jej nie ma.

Strona podręcznika dla tmux mówi:

Jeśli nie zostanie uruchomiony żaden serwer, sesja dołączania (dołączanie) spróbuje go uruchomić; zakończy się to niepowodzeniem, chyba że sesje zostaną utworzone w pliku konfiguracyjnym.

Co oznacza pogrubiona sekcja? (Nie mogę znaleźć przykładu tworzenia sesji w pliku conf).

Geeb
źródło
Ze strony podręcznika: „ Plik konfiguracyjny to zestaw tmuxpoleceń, które są wykonywane sekwencyjnie przy pierwszym uruchomieniu serwera. ” - możesz mieć attachlub new-sessionjako wiersz w swoim .tmux.conf.
sr_
@sr_ Cóż, i tak po raz pierwszy serwer new-sessionmiałby się wydarzyć ...
Chris Down
Właśnie znalazłem to (zamknięte) pytanie na SO. To samo pytanie z podobnymi odpowiedziami. stackoverflow.com/q/3432536/168034
phunehehe

Odpowiedzi:

15

Tak:

$ tmux attach -d || tmux new

-djest konieczne, aby zachowywać się jak screen -Dnp. odłączyć wszystkich innych.

Połącz przez ssh, następnie dołącz lub utwórz może być coś takiego:

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

$ stmux my.remote.box
mmoya
źródło
1
Tak - wydaje się to być najbardziej skutecznym sposobem na osiągnięcie tego, o co prosiłem. Podobnie nie zgadzam się z new-sessionplikiem konfiguracyjnym na wypadek, gdybyś chciał go edytować i załadować ponownie podczas sesji tmux.
Geeb
4

Aby tmux attachutworzyć nową sesję, gdy jej nie ma, użyj opcji new-sessionw pliku konfiguracyjnym tmux. Utwórz plik, ~/.tmux.confjeśli nie istnieje, i dodaj

new-session

do tego. Ponadto, alias tmuxdo tmux attach:)

phunehehe
źródło
1
Wolę nie mieć new-sessionw ~/.tmux.confbo gdybym przeładować konfigurację za pomocą komendy source-file ~/.tmux.conf(zobacz to ) nowa sesja zostanie uruchomiony. Tak, mogę go zabić, a następnie dołączyć do poprzedniego, ale to trochę denerwujące.
mmoya
3

Można to emulować za pomocą funkcji powłoki, powinno to działać z każdą powłoką zgodną z POSIX:

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
}

Teraz, jeśli uruchomisz go jako tmux -z, powinien on wykonać akcje, których szukasz.

Chris Down
źródło
2

ten działa dla mnie trochę lepiej:

tmux new-session -AD -s <session-name>
ZA
źródło
1

Uważam, że to działa najlepiej dla mnie na .bashrc

if [[ -z $TMUX ]]; then
  tmux attach-session || tmux new-session
fi
użytkownik2451432
źródło
Jak to tłumaczy pogrubioną sekcję w PO?
Anthon
0

Jeśli używasz tego w pliku .shrc lub podobnym z execpolecam

if tmux ls
  exec tmux attach
else
  exec tmux
fi
Aaron J Lang
źródło