Tmux'u başlatmak için varsayılan kabuğumu nasıl ayarlayabilirim


Yanıtlar:


46

Bu iş gibi görünüyor ...

https://wiki.archlinux.org/index.php/Tmux#Start_tmux_on_every_shell_login

Basitçe aşağıdaki bash kodu satırını .bashrc'ye takma adlarınızdan önce ekleyin; diğer mermiler için kod çok benzer:

[[ $TERM != "screen" ]] && exec tmux

2
Benim için bu da [[ $- != *i* ]] && returnsonsuz bir döngü olmamak için gerekli (aynı sayfadan)
Keith Smiley

5
Bu, TERMkullanıcının .tmux.confdosyası tarafından başka bir değere ayarlanabileceği için kötü bir çözümdür . TMUXDeğişkenin ayarlanıp ayarlanmadığını kontrol etmek daha iyidir.
Kusalananda

104

@ StarNamer'in cevabı genellikle doğrudur, ancak tipik olarak (1) tmux'un sistemde bulunduğundan emin olmak için aşağıdaki testleri de dahil ediyorum, (2) etkileşimli bir kabuk içindeyiz ve (3) tmux içinde çalışmaya çalışmıyor kendisi:

if command -v tmux &> /dev/null && [ -n "$PS1" ] && [[ ! "$TERM" =~ screen ]] && [[ ! "$TERM" =~ tmux ]] && [ -z "$TMUX" ]; then
  exec tmux
fi

Referanslar


1
Güzel, daha commandönce ihtiyacım vardı ama var olduğunun farkında değildim.
Freedom_Ben

2
bu execifade, terminalden çıkmadan tmux'dan çıkmanıza izin vermiyor! : |
Louis Maddox

5
@LouisMaddox: execşu anki süreci yenisiyle değiştirir - bu durumda, bash giriş kabuğunu tmux ile değiştirir, bu nedenle tmux çıktığında geri dönecek başka terminal yoktur :)
Mark K Cowan

1
@rjt Bu doğru, bu tasarımla yeni bir oturum başlatır. Mevcut bir tmux oturumuna eklemeyi tercih ediyorsanız, tercih ettiğiniz exec tmuxlezzet ile değiştirintmux attach
user7089

2
yerine exec tmuxkullandığım exec tmux new-session -A -s mainbu yüzden her zaman bir oturum ana denilen ve (yerine benim uzak makineye bağlanmak bir yenisi her şey yaratma) ona bağlanması ancak kullanmak gibi kaza olmayacak olacak tmux attachburada bulunan hiçbir oturum (olmaması durumunda: unix.stackexchange.com/a/176885/256942 )
Verena Haunschmid

16

Gibi bir satır ekleme

[ -z "$TMUX"  ] && { tmux attach || exec tmux new-session && exit;}

bashrc dosyanızda muhtemelen işi yapacak. Bu satırın ssh'den çıkacağını ve tmux'tan ayrıldığınızda veya çıktıktan sonra bağlantıyı sonlandırdığını unutmayın. Bağlantıyı sonlandırmak için tuş vuruşlarını kaydettiği için bu yapılandırmayı seviyorum. Ancak bunu sevmiyorsanız (ki bence pek mümkün değildir) ve sonlandırmanın ardından giriş kabuğunda kalmayı tercih ederseniz, sadece şu exitbölümü kaldırın :

[ -z "$TMUX"  ] && { tmux attach || exec tmux new-session;}

Ayrıca sarmak gerektiğini unutmayın tmux attachile execeklemek için hiçbir tmux oturumları olduğunda bu bağlantı kapatılacak neden olur gibi.


.Bashrc'ye bu satırı ekledim, ancak şimdi bir terminale başladığımda bazı mesajlar alıyorum: /home/z/.tmux.conf:10: geçerli oturum yok (mesaj satır 11, 13, 14 için tekrarlanıyor) , 15). Bu satırlar "set default-command" exec bash "" ve "set default-terminal" screen-256color "gibi şeylerdir.
Matt G

@MattG tmux yapılandırma dosyasında bir sorun olduğunu düşünün.
huangzonghao

5

chshGiriş kabuğunu değiştiren bir komut var. Danışın man chsh.


6
tmuxBir kabuk değil, GNU ekranı gibi bir terminal çoklayıcı . İlginçtir, man sayfasına-c göre seçeneği destekler , bu nedenle giriş kabuğunuzu kullanmanız için yeterli bir kabuk gibi çalışabilir, ancak gdm / kdm üzerinden grafiksel girişler gibi tüm durumlarda düzgün çalışmadığından şüpheleniyorum. .
Mikel

1
Her ne kadar bu mantıklı ve belgelerle desteklenmiş olsa da, SSH (gibi bir şey ssh $some_server echo foo) ile doğrudan komut çalıştırmayı bozuyor gibi görünüyor .
n.st

3
Ubuntu'da en az 1.8 olan tmux kendisini ekler /etc/shells, bu yüzden geçerli bir giriş kabuğu.
claytron

2
Bu default-shell, tmux yapılandırmasındaki ayarı gerçek bir kabuğa işaret edecek şekilde yapılandırmanızı gerektirir .
Kusalananda

4

Başarıyla kullanıyorum

case $- in *i*)
    [ -z "$TMUX" ] && exec tmux
esac

benim içinde .zshrc. Bash kullanıyorsanız, .bashrcyerine koyun .


Ayrıca sadece tmuxvarsayılan kabuk olarak ayarlamayı denedim ( chsh -s $(which tmux)) ve SSH üzerinden doğrudan komut çalıştırmayı bozuyor gibi görünüyor, örneğin ssh $some_server echo fooherhangi bir çıktı üretmeyecek.


3

Terminal tercihlerine git. görüntü tanımını buraya girin

Ve sonra "komut" çubuğuna tıklayın. görüntü tanımını buraya girin

"Satmak yerine özel bir komut çalıştır" seçeneğini işaretleyin ve terminalinizin başlangıcında çalıştırmak istediğiniz komutu yazın.


1

Yukarıdaki yanıtların hiçbiri benim için işe yaramadı - exec tmuxkabuktan çıkmadan tmux'u kapatmamı engelliyor ( Ctrl+ ile mi yoksa Tuygulama menüsünden açılmış mı ).

Sana komutlara belirli kısayol tuşlarını harita sağlar ve Linux Mint, kullanmak (un-koşer bazı olabilir .. gibi) Ben komutları örneğin oraya başlayan bash kabukları var Win+ Alt+ Bdolambaçlı bir çeşit yapar bash -exec(vim)için deyimi benim .bashrc düzenleme, bu yüzden normal bir kabuk gibi davranır.

Yukarıdaki durum benim üstüme yerleştirildikten sonra bu durum altında vim yerine tmux yüklü .bashrc. Tmux yürütme satırını başka bir if ifadesine sararken, etkileşimli modda çalıştığını kontrol ettik.

if command -v tmux>/dev/null; then
        if [ ! -z "$PS1" ]; then # unless shell not loaded interactively, run tmux
                [[ ! $TERM =~ screen ]] && [ -z $TMUX ] && tmux
        fi
fi

Hepsini bir satıra sarabilirsin ama okunabilirlik için bence iyi.


Ve işareti eklemek bu sorunu böyle çözdü. [[ ! $TERM =~ screen ]] && [ -z $TMUX ] && exec tmux &
Daniel Chateau,

1

@Louis Maddox'un cevabını ekleyerek, tmux bölümünü de uygulardım;

(exec tmux attach || exec tmux new-session)

Kullandığım exec sh -c 'tmux a || tmux'teşekkürler, :) artık senin kullanacağız ..... (Cevabınız baktıktan sonra) muhtemelen tmux herhangi bir nedenle başlayamaz eğer kötü şeyler olur yapacak,
Mark K Cowan

1
tmux new -A -s mysessionmuhtemelen de çalışacak.
poolie

1

Bu benim ~/.profile(kullanıyorum ksh93):

if [[ -z "$TMUX" ]]; then
    if tmux has-session 2>/dev/null; then
        exec tmux attach
    else
        exec tmux
    fi
fi

Eğer TMUXortam değişkeni belirsiz / boşsa, zaten bir tmux oturumunda değiliz, o yüzden ...

Eğer tmux has-sessionsıfır çıkış durumu (true) ile döner, eklemek kullanılabilir bir bölüm de vardı. Eklemek

Değilse, yeni bir oturum oluşturun.

tmuxGiriş kabuğunuz olarak kullanmak da mümkündür . Ancak bunu yaparsanız, dosyanızda default-shellgerçek bir kabuk ayarladığınızdan emin olun ~/.tmux.conf(bu konuda daha fazla bilgi için tmux kılavuzuna bakın).


1

chshTmux'u varsayılan kabuk olarak ayarlamak için komutunu kullanabilirsiniz (ve muhtemelen şu anda olması gerekir) , sonra da şunu ekleyin .tmux.conf:

set-option -g default-shell /path/to/your/favourite/shell

Çizginin sonundaki yolu değiştirmeyi unutmayın.


1

Kapsamlı kontrolleri, koşullu oturum kontrolü ile birleştirdim ve bağlı veya başka bir şekilde oluşturulmuş varsayılan bir oturum oluşturmak için kendi dönüşümü yaptım. Başka bir smokin seansında değilseniz ya da başka koruyucu koşullar yerine getirilmişse.

if command -v tmux &> /dev/null && [ -n "$PS1" ] && [[ ! "$TERM" =~ screen ]] && [[ ! "$TERM" =~ tmux ]] && [ -z "$TMUX" ]; then
  tmux a -t default || exec tmux new -s default && exit;
fi

Bu cevaplara dayanarak:

https://unix.stackexchange.com/a/306165/198110

https://unix.stackexchange.com/a/113768/198110


0

Bunu içine ekle ~/.tmux.conf

set -g default-command /usr/local/bin/fish

1
Sanırım soru dostunu yanlış anladın! ;)
PhilT

-3

Mikel’in daha önce de söylediği gibi, giriş kabuğunuzun yan etkileri olabilir. Ama tmuxtam anlamıyla varsayılan kabuğunu yapabilirsin . Bir kullanıcının varsayılan kabuğu / etc / passwd içinde tanımlanır. Böylece root olabilir ve / etc / passwd dosyasını düzenleyebilirsiniz, örneğin sudo vi /etc/passwdkullanıcı adınızla başlayan satırı arayın. Muhtemelen ile biter :/bin/bash. / Bin / bash değerini / usr / bin / tmux olarak değiştirin, şimdi tmux varsayılan giriş kabuğunuzdur.

Ancak, bunun sorunlara yol açmayacağının garantisi yok!

Ne iyi çalışabilir etmektir DEĞİL root yetkileri requries şey yapmak. Ev dizinimde .bash_login adında bir dosya oluşturmaya ve bu dosyadan tmux'u başlatmaya çalışırım: `echo" tmux "> ~ / .bash_login.

Bu işe yaramalı, ama kendimizi bulmaya çalışmalısın, b / c bash belgeleri ne zaman okunduğu ve yürütüldüğü konusunda kesin değil.


2
İlk paragrafınızın anlattığı şey ne chsh! Bunun dışında, senin yolun kök olmayı gerektirir ve hataya açık. Kaçmak tmux, uzak girişleri kırmak .bash_loginiçin daha muhtemeldir.
Gilles
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.