Yoksa yeni tmux oturumu nasıl oluşturulur?


144

Ben tmux sessionadlandırılmış bir tmux oturumu varsa, eklemek için nasıl anlamaya çalışıyorum , değilse verilen adla yeni bir tane oluşturmak istiyorum.

Şu anda, tmuxkısmen aradığım şeyi başarabilen birkaç komut biliyorum , ama aradığım şeyi elde etmek için bunları nasıl birleştireceğiniz açık değil:

  • tmux attach otomatik olarak var olan bir oturuma eklenir - ancak oturum yoksa hata verir
  • tmux new yeni bir oturum oluşturur - ancak bunu her seferinde yapar, bu yüzden oturumda bırakamam .tmux.conf
  • tmux has-session bir oturumun var olup olmadığını test eder - ancak diğer komutlarla birlikte nasıl birleştirileceğini bilmiyorum

Böylece, bir tmux betiği oluşturmak istiyorum, böylece bu otomatik olarak gerçekleşir, bunun yerine her oturumda oturum açmam gerektiğinde el ile oluşturmak zorunda kalmazsınız.

Yeni bir tmux oturumu oluşturmak için (belirli bir oturum adı yoksa) veya oturum adına (varsa) nasıl otomatik komut dosyası yazabilirim?


15
@kzh: Bunu vim gibi bir programlama aracı sorusu olarak
görüyorum

6
Herkesin ilgilenmesi durumunda, bu soru için bir başka cevap daha yazdım: gist.github.com/chakrit/5004006
chakrit

9
Bu arada, man tmuxdiyor ki: "-A bayrağı, oturum adı zaten varsa yeni oturumun ek oturum gibi davranmasını sağlar"
Petr Viktorin

1
İşaretlemek için işaretlemek için, moderatörler bile 60 günden daha eski soruları başka bir siteye taşıyamaz. Bu sistem sınırının nedenleri burada açıklanmaktadır .
Brad Larson

1
@BradLarson, şu anda, bunu yapmanın en iyi / en basit seçeneği, bir yorumda aşağıya doğru cevaplandı: stackoverflow.com/questions/3432536/… . Buraya gelen çoğu kullanıcı bunu bulamayacak. Oyların görebileceğiniz gibi bu çok önemli bir soru. Bu soruyu açmak mümkün mü, bu yüzden bunu cevap olarak ekleyebilirim, böylece yeni insanlar bunu bulabilir mi?
alpha_989

Yanıtlar:


89

Alternatif olarak,

new-session

To Your .tmux.conf- o sunucu başlatılması konusundaki varsayılan oturumu yaratacaktır.

Ardından tmux attach, geçerli oturuma (çalışan sunucu) eklenir veya yeni bir oturum oluşturulur (sunucuyu başlatır, yapılandırma dosyasını okur, new-sessionkomutu verir) ve ekler .


3
Bu yeni bir oturum oluşturduğunda, varsayılan yol ana dizinimdir, tmux'un çağrıldığı yol değil.
Richard Hansen

2
@AB: hangi cevabı kastediyorsun?
Jürgen A. Erhard

@ RichardHansen sorununu çözmenin bir yolu var mı? Mevcut yoldan çağırmak en mantıklı görünüyor ve eğer bunu new-sessionyok ederse gerçek bir sorun gibi görünüyor.
Lee Olayvar

2
Bu, kullanmanız durumunda tmux yapılandırmasının yeniden yüklenmesini source-file ~/.tmux.conf
bozar

11
@SebastianBlask , oturumunuza ad veriyorsanız -Aseçeneğini kullanabilirsiniz new-session. new-session -A -s mysessionyapılandırma yeniden yükleme ile güzel oynayacak.
jkoelker

163

Anladım ( ve bana işaret etmişti ).

tmux attach || tmux new

28
Ben oturumu adlandırabilir, çünkü bu cevap benim için daha iyi çalışır: tmux attach-session -t my-session || tmux new-session -s my-session. Tek sorun bunun atomik olmaması. tmux'un gerçekten bir oluştur veya ekle komutu olması gerekir.
Andrew

5
Ben bash sonraki takma adı -alias tm='tmux attach || tmux new'
azat

10
Küçük bir değişiklikle bu adlandırılmış oturumlarla çalışır çünkü tmux attach -t some_name || tmux new -s some_name. Some_name değerini 1 $ olarak değiştirin ve bir shebang ekleyin ve kaydedin.
Cheezmeister

10
Tmux aşina ve merak edilenlere Not newvs new-sessionbunlar eş ve böylece şunlardır: attachve attach-session.
Esteis

1
tmux new-session -ds default \; split-window -dv 2>/dev/null; tmux attach -t defaultçok daha iyi çalışır /bin/killve ilk durumda ikinci bir tmux açmaz . Tek dezavantajı, bunun için oturumları adlandırmanız gerektiğidir.
Tino

64

Petr Viktorin , jkoelker ve pjincz'nin yorumlarında belirtildiği gibi , varsa eklemek için ve aşağıdaki mySessiondeğilse oluşturmak için aşağıdaki komutu kullanabilirsiniz :

 tmux new -A -s mySession

Gönderen man tmux:

new-session[-AdDEP] [-cstart-directory] [-Fformat] [-nwindow-name] [-ssession-name] [-tgroup-name] [-xwidth] [-yheight] [shell-command]

(diğer adı: new)

Adıyla yeni bir oturum oluşturun session-name.

[...]

-ABayrak yapar new-sessiongibi davranırlar attach-sessioneğer session-namezaten var; bu durumda, -Ddavranır gibi -detmek attach-session.

new-session-Atmux-1.8'den beri destekliyor .


1
Bunu gnome-terminalkomut gibi bir şeyde kullanacaksanız -sve belirli oturum adını bırakmanızı öneririm, böylece gnome-terminalaynı oturuma bağlı HER yeni oturumla karşılaşmazsınız. prefix + sYeni bir terminal açtıktan sonra istediğiniz zaman mevcut bir oturumu seçebilirsiniz .
dragon788

14

Her ne kadar rampion'un cevabını 1 oturum kullanmak için yeterli bulsam da, bu komut dosyası birden çok oturum ayarlamanıza izin verir:

SESSIONS="work play"

function has-session {
    tmux has-session -t $1 2>/dev/null
}

function except 
{
    if [ "$?" -eq 1 ] ; then
        $1
    fi
}

# Configure your sessions here
function session-work
{
    tmux new-session -d -s work
    tmux neww -k -t work:1
}

function session-play
{
    tmux new-session -d -s play
    tmux neww -k -t play:1
}

#
#MAIN 
for x in $SESSIONS
do
    echo $x
    has-session $x
    except session-$x
done

NOT:

-k  --> new-window will not be created if already exists
-d  --> start session or window, but don't attach to it yet
-s  --> name the session
-t  --> specify a target location in the form session:window.pane 

13

Alex'in önerisini başlangıçta proje tabanlı yapılandırmayı içerecek şekilde uyarlayarak aşağıdakileri kullanmaya başladım:

# ~/bin/tmux-myproject shell script
# The Project name is also used as a session name (usually shorter)
PROJECT_NAME="myproject"
PROJECT_DIR="~/myproject"

tmux has-session -t $PROJECT_NAME 2>/dev/null
if [ "$?" -eq 1 ] ; then
    echo "No Session found.  Creating and configuring."
    pushd $PROJECT_DIR
    tmux new-session -d -s $PROJECT_NAME
    tmux source-file ~/bin/tmux-${PROJECT_NAME}.conf
    popd
else
    echo "Session found.  Connecting."
fi
tmux attach-session -t $PROJECT_NAME

tmux-myproject.confWindows ve bölmelerimi oluşturmak ve editörlerimi başlatmak için başlangıç ​​dizisi tmux komutları nerede .


8

Gerekirse yeni bir oturum oluşturmak için bir takma ad kullanırım ve zaten varsa varsayılan oturuma eklerim:

alias tmuxre='tmux new-session -t default || tmux new-session -s default'

Bunu sunucumdaki .login dosyasına ekledim.

Bu şekilde yapmamın nedeni, aynı gerçek oturuma eklemek istemediğimden, aynı pencere grubunu kullanan yeni bir oturum istiyorum.

Bu koşmaya da benzer screen -xRR.


2
Oturumunuza sık sık girip çıkıyorsanız, bu, görüldüğü gibi kullanılmayan oturumlar bırakır tmux list-sessions.
Anm

Evet, öyle, sadece arada bir temizliyorum. İstediğim işlevselliği elde etmek küçük bir dezavantaj.
Michael

Hey @ mateusz-piotrowski - Kodumu bir kod bloğuna sarmak için düzenlemeye katılıyorum, ancak diğer metni neden söylediğimden farklı olacak şekilde düzenleyesiniz? Burada yorum için üzgünüm ama başka bir yerde görmedim.
Michael

Seni gücendirmek istemedim. Sadece olamazdı düşünce çalıştırmak bir takma ad içinde bir yapılandırma dosyasında ve bir yazım hatası olmalı böylece.
Mateusz Piotrowski

3
Şimdiye kadar, yalnızca şunu yazabilirsiniz: tmux new -A -s defaultyoksa yeni bir oturum başlatmak veya otomatik olarak eklemek. Bence yapılandırma dosyasını düzenlemekten çok daha iyi.
pjincz

1

Aynı şeyi yapmak isteyenler için fish:

tmux attach -t mysesh; or tmux new -s mysesh
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.