odpowiednik tmux „screen -R”?

10

tmux attachKomenda działa bardziej jak połączenie screen -ri screen -x- pierwszy to co¶, aby dołączyć do ostatnio jednorodzinnym sesji, a następnie, jeśli żadna nie jest dostępna będzie przywiązywać do aktualnie załączonym sesji. Chcę emulować zachowanie screen -R: najpierw spróbuj dołączyć do odłączonej sesji, a następnie rozpocznij nową sesję, jeśli nie było odłączonych sesji. Jaki jest najlepszy sposób na osiągnięcie tego w tmux?

Drew Frank
źródło

Odpowiedzi:

12

Po konsultacji z czarodziejami IRC jestem pewien, że nie ma jednej komendy tmux, która miałaby takie zachowanie. Na szczęście dość łatwo jest emulować za pomocą powłoki:

(tmux ls | grep -vq attached && tmux at) || tmux
Drew Frank
źródło
Drobna edycja w celu stłumienia wyniku „nie udało się połączyć z serwerem: odmowa połączenia” w przypadku rozpoczęcia nowej sesji:(tmux ls 2>/dev/null | grep -vq attached && tmux at) || tmux
l8nite
3

Pomimo tego, co napisano w podręczniku tmux:

             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.

Odpowiedź Drew nie działa poprawnie w sytuacji takiej jak:

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 atdołącza się do ostatniej sesji (# 1) (mimo że ta sesja jest nadal dołączona gdzie indziej). To rujnuje cały pomysł prowadzenia kilku sesji tmux i dołączania tylko do odłączonej (użycie mosh + tmux + iterm2 do stworzenia idealnego terminalu mobilnego).

Innym podejściem byłoby ręczne wybranie sesji nieprzyłączonej:

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

użytkownik1559834
źródło
Dobry chwyt! Dokumentacja nie jest zsynchronizowana z rzeczywistym zachowaniem. Utworzyłem dla tego raport o błędach .
Drew Frank,
Wydano łatkę, która to rozwiązuje, więc do następnej wersji powinna zachowywać się jak w reklamie.
Drew Frank,
Czy łatka jest w wersji 1.8?
momeara
2

Zwykle mam tylko dwie sesje tmux na raz, więc robię coś takiego w każdym oknie terminala.

okno terminala 0:

tmux attach -t 0 || tmux new

okno terminala 1:

tmux attach -t 1 || tmux new
Charles Witt
źródło
2

To działało dla mnie najlepiej:

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

-T jest potrzebne, aby dołączyć do właściwej sesji.

Tomberek
źródło
1

Co powiesz na

tmux attach || tmux new

lub zamiast tego po prostu utwórz plik, ~/.tmux.confjeśli nie istnieje, i dodaj

new-session

do tego, że tworzy nową sesję, gdy nie ma jej podczas uruchamiania tmux attach.

Przydatny może być również tmuxalias do tmux attach.

Tamara Wijsman
źródło
Pierwsza propozycja dołączy do aktualnie dołączonych sesji tmux (podobnych do screen -x), czego chcę uniknąć. Druga propozycja wykazuje ten sam problem, a także ma niepożądaną konsekwencję tworzenia „dodatkowych” sesji tmux, gdy używam polecenia pliku źródłowego tmux do przeładowania konfiguracji.
Drew Frank,