Jak rozpocząć tmux z attach, jeśli sesja istnieje


Odpowiedzi:


51

Odpowiedź jest znacznie prostsza. Po prostu umieść to w swoim ~/.tmux.confpliku:

# if run as "tmux attach", create a session if one does not already exist
new-session -n $HOST

Jeśli uruchomisz tmux attachi istnieje sesja, zostanie ona dołączona do tej sesji (niezależnie od tego, czy jest już dołączona, czy nie). Jeśli nie ma jeszcze sesji, utworzy ją dla Ciebie.


11
jest to fajna sztuczka, ale jest zastrzeżenie: jeśli tmuxzostanie wywołana bez argumentów, utworzy nową sesję, a następnie utworzy drugą sesję, gdy tylko osiągnie ten wiersz w twoim ~/.tmux.conf. Ten problem można zobaczyć, wykonując tmux lspo utworzeniu pierwszej sesji. W praktyce po umieszczeniu tego w pliku nie można już dzwonić tmuxbez żadnych argumentów
Bruno Polaco

4
Musisz więc dodać alias, alias tmux="tmux attach"aby zapobiec temu problemowi
rubo77

@BrunoPolaco: co to za duże zastrzeżenie z dodatkową pustą sesją tmux trwającą cały czas (poza tym nie wygląda to schludnie na liście zadań)?
rubo77

@ rubo77 Zasoby. Niektóre osoby mają kilka domyślnych narzędzi, okien, paneli itp. Utworzonych podczas uruchamiania tmux.
rovr138

129

Jeśli nazywanie sesji jest w porządku, możesz łatwo wykonać new-sessionpolecenie:

tmux new-session -A -s main

gdzie mainjest nazwa sesji, która zostanie dołączona lub utworzona w razie potrzeby.

Od man tmux:

-AFlag sprawia new-sessionzachowywać się jak attach-sessiongdyby sesja nazwa już istnieje; w tym przypadku -Dzachowuje się jak -dsię attach-session.

Należy również pamiętać, że -Aopcja została wprowadzona w wersji tmux 1.8od 26 marca 2013 r. W przypadku wcześniejszych wersji należy użyć tmux attach || tmux.


10
+1 za korzystanie z wbudowanych funkcji i udostępnianie fragmentu dokumentu man
Ari Patrick

1
W moim liście alias: alias "tmux-attach-or-create-main-session=tmux new-session -A -s main". Dzięki za wskazówkę! Strona podręcznika: openbsd.org/cgi-bin/man.cgi/OpenBSD-current/man1/tmux.1
Jeroen Wiert Pluimers

tmux: unknown option -- AWydaje się, że jest to dostępne tylko w najnowszych wersjach.
xApple

Jest to metoda, której użyłem, ale nie możesz już używać „tmux detach”. Aby zapisać i opuścić istniejącą sesję, musisz użyć skrótu <ctrl> b - d.
Jess,

2
[ -z "$TMUX" ] && exec tmux new -As .tego właśnie używam w swoim .bashrc.
ryenus

30

Rozpocznie się nowa sesja, jeśli dołączenie spowoduje błąd:

tmux attach || tmux new

Więc alias wykona zadanie:

tm="tmux attach || tmux new"

Możesz nawet go skrócić, zmieniając tmux attachnatmux a
Bruno Polaco

Chociaż jest to funkcjonalne, rozwiązanie Wesleya Baugha wykorzystuje wbudowaną funkcjonalność tmux, aby zrobić to samo
Ari Patrick

fwiw wydaje się to najlepszą odpowiedzią na starsze wersje, zanim wprowadzono -A (np. v1.6)
Christopher Peterson

3

Rozważ dodanie następujących elementów do swojego .bashrc

if [ -z "$TMUX" ]; then
    base_session='my_session'
    # Create a new session if it doesn't exist
    tmux has-session -t $base_session || tmux new-session -d -s $base_session
    # Are there any clients connected already?
    client_cnt=$(tmux list-clients | wc -l)
    if [ $client_cnt -ge 1 ]; then
        session_name=$base_session"-"$client_cnt
        tmux new-session -d -t $base_session -s $session_name
        tmux -2 attach-session -t $session_name \; set-option destroy-unattached
    else
        tmux -2 attach-session -t $base_session
    fi
fi

Możesz zobaczyć moje wykorzystanie tego w moim pliku zasobów ZSH na moim repozytorium github


2

Aby rozwinąć odpowiedź Wesleya Baugha (która była dla mnie sesjami podwójnego zagnieżdżania podczas używania w .bashrc przy logowaniu) i dodać trochę elastyczności, ponieważ często używam sudo -sna serwerach (które należycie ładowałyby mój .bashrc ponownie i podwójne gniazdo), oto co mam w moim .bashrc:

if [ -z "$TMUX" ] && [ ${UID} != 0 ]
then
    tmux new-session -A -s main
fi

To sprawdza sesję tmux i upewnia się, że nie jesteś superużytkownikiem przed utworzeniem nowej sesji lub dołączeniem do istniejącej o nazwie main.


1

Drew Frank odpowiedział na to tutaj: https://superuser.com/questions/487363/tmux-equivalent-of-screen-r

Oto skrypt, którego teraz używam (jednak wróciłem do ekranu z powodu innego problemu z tmux) /somewhere/on/your/path/ttmuxlub jako funkcję powłoki:

#!/bin/sh
# many thanks to Drew Frank: https://superuser.com/questions/487363/tmux-equivalent-of-screen-r
(tmux ls | grep -vq attached && tmux -2 at) || tmux -2

Te -2opcje sprawiają tmux zakładamy 256 kolorów wspornik terminala, więc te mogą nie być odpowiednie dla danej sytuacji.



1

Poprawiłem trochę odpowiedź @SuperMagic. Kładę ten blok na górze mojego.zshrc

if [[ $TMUX = "" ]]; then
  # try to reattach sessions
  tmux ls | grep -vq attached && TMUXARG="attach-session -d"
  exec eval "tmux -2 $TMUXARG"
fi
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.