Bir oturum varsa tmux'e attach ile nasıl başlanır


92

Kullanırsam

tmux attach

Çalışan bir oturuma ekleyebilirim ancak çalışan bir oturum yoksa, yalnızca hatayı alıyorum

no sessions

Çalışmıyorsa yeni bir oturumu otomatik olarak nasıl başlatabilirim? gibi bir şey

tmux attach-or-create-new-session

Yanıtlar:


51

Cevap çok daha basit. Sadece bunu ~/.tmux.confdosyanıza ekleyin :

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

Eğer koşarsanız tmux attachve bir oturum varsa, o oturuma eklenir (zaten ekli olsun veya olmasın). Yoksa değil bir oturum zaten o zaman sizin için bir tane yaratacaktır.


11
Bu düzgün bir hiledir, ancak bir ihtar var: eğer tmuxargümanlar olmadan çağrılırsa, yeni bir oturum oluşturacak ve daha sonra sizin için bu satıra ulaştıktan sonra ikinci bir oturum oluşturacaktır ~/.tmux.conf. İlk oturumu tmux lsoluşturduktan sonra çalıştırarak bu sorunu görebilirsiniz . Uygulamada, bunu dosyanıza koyduktan sonra, artık hiçbir argüman olmadan tmux
arayamazsınız

4
Yani alias tmux="tmux attach"bu sorunu önlemek için bir takma ad eklemek zorunda
kalacaksınız

@BrunoPolaco: Her zaman çalışan ekstra boş bir tmux seansı olan büyük ihtar nedir (bunun dışında görev listesinde düzenli görünmüyor)?
rubo77 26:16

@ rubo77 Kaynakları. Bazı insanlar, piyasaya sürüldüklerinde oluşturulan birkaç varsayılan araca, pencereye, bölmeye vs. sahiptir tmux.
rovr138

129

Oturumunuzun isimlendirilmesi tamamsa, new-sessionkomutla yapmak kolaydır :

tmux new-session -A -s main

mainGerekirse eklenecek veya oluşturulacak oturumun adı nerede ?

Kimden man tmux:

-ABayrak yapar new-sessiongibi davranmaya attach-sessioneğer oturum adı zaten var; bu durumda, -Dgibi davranır -diçin attach-session.

Lütfen, bu -Aseçeneğin 26.03.2013 tarihinden 1.8itibaren tmux sürümünde kullanıldığını ve önceki sürümlerde kullanıldığını unutmayın tmux attach || tmux.


10
İşlevsellik kullanmak ve erkek doktor pasajı sağlamak için +1
Ari Patrick

1
Benim takma listesinde: alias "tmux-attach-or-create-main-session=tmux new-session -A -s main". Bahşiş için teşekkürler! Manuel sayfa: openbsd.org/cgi-bin/man.cgi/OpenBSD-current/man1/tmux.1
Jeroen Wiert Pluimers 14:15

tmux: unknown option -- ABu sadece son sürümlerde mevcut görünmektedir.
xApple

Kullandığım yöntem bu, ancak artık "tmux detach" kullanamazsınız. Mevcut bir oturumu kaydedip çıkmak için <ctrl> b - d kısayolunu kullanmanız gerekir.
Jess,

2
[ -z "$TMUX" ] && exec tmux new -As .işte kullandığım şey bu .bashrc.
ryenus

30

Eğer ek bir hata verirse bu yeni bir oturum başlatır:

tmux attach || tmux new

Yani bir takma ad işi yapacak:

tm="tmux attach || tmux new"

Hatta değiştirerek daha kısa yapabilir tmux attachiçintmux a
Bruno Polaco

Bu işlevsel olsa da, Wesley Baugh'un çözümü aynı şeyi yapmak için tmux'un yerleşik işlevlerini kullanıyor
Ari Patrick

fwiw bu, eski versiyonlar için en iyi cevap gibi gözüküyor, -A tanıtılmadan önce (örneğin v1.6)
Christopher Peterson,

3

Şunlara aşağıdakileri eklemeyi düşünün: .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

Bunu kullanımımı ZSH kaynak dosyamda github depomda görebilirsiniz.


2

Wesley Baugh'un yanıtını genişletmek (oturum açmalarda .bashrc'de kullanıldığında benim için çift yuvalama oturumları) ve sudo -ssunucularda sık sık kullandığımdan ( biraz .bashrc dosyasını tekrar yükleyeceğim) kullandığım için biraz esneklik eklemek için , işte burada .bashrc'imde ne var:

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

Bu, bir tmux oturumu denetler ve yeni bir oturum oluşturmadan veya adlandırılmış olan mevcut bir şeye eklemeden önce süper kullanıcı olmadığından emin olmanızı sağlar main.


1

Drew Frank bunu burada cevapladı: https://superuser.com/questions/487363/tmux-equivalent-of-screen-r

İşte şimdi bunun için kullandığım komut dosyası (yine de, tmux ile ilgili başka bir sorun nedeniyle ekrana döndüm) /somewhere/on/your/path/ttmuxveya bir kabuk işlevi:

#!/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

-2Seçenekleri 256 renk terminali destek kabul tmux yapmak, böylece bu durumunuza uygun olmayabilir.



1

@ SüperMagic cevabını biraz geliştirdim. Bu bloğu üstüme koydum.zshrc

if [[ $TMUX = "" ]]; then
  # try to reattach sessions
  tmux ls | grep -vq attached && TMUXARG="attach-session -d"
  exec eval "tmux -2 $TMUXARG"
fi
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.