Varsayılan bash kabuğumun her zaman her zaman tmux yazmak zorunda kalmam yerine doğrudan tmux'a girmesini istiyorum.
Varsayılan bash kabuğumun her zaman her zaman tmux yazmak zorunda kalmam yerine doğrudan tmux'a girmesini istiyorum.
Yanıtlar:
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
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.
@ 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
commandbir komut varlığını denetlemek için - http://man7.org/linux/man-pages/man1/bash.1.html#SHELL_BUILTIN_COMMANDScommandyerine kullanmak whichiçin - https://unix.stackexchange.com/a/85250$PS1Etkileşimli kabuğu denetlemek için kullanma - https://www.gnu.org/software/bash/manual/html_node/Is-this-Shell-Interactive_003f.html$TERM"Tmux içinde çalışan tüm programlar için" ortam değişkeninin beklenen durumu - http://man7.org/linux/man-pages/man1/tmux.1.html#WINDOWS_AND_PANEScommandönce ihtiyacım vardı ama var olduğunun farkında değildim.
execifade, terminalden çıkmadan tmux'dan çıkmanıza izin vermiyor! : |
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 :)
exec tmuxlezzet ile değiştirintmux attach
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 )
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.
chshGiriş kabuğunu değiştiren bir komut var. Danışın man chsh.
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. .
ssh $some_server echo foo) ile doğrudan komut çalıştırmayı bozuyor gibi görünüyor .
/etc/shells, bu yüzden geçerli bir giriş kabuğu.
default-shell, tmux yapılandırmasındaki ayarı gerçek bir kabuğa işaret edecek şekilde yapılandırmanızı gerektirir .
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.
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.
[[ ! $TERM =~ screen ]] && [ -z $TMUX ] && exec tmux &
@Louis Maddox'un cevabını ekleyerek, tmux bölümünü de uygulardım;
(exec tmux attach || exec tmux new-session)
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,
tmux new -A -s mysessionmuhtemelen de çalışacak.
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).
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.
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:
Bunu içine ekle ~/.tmux.conf
set -g default-command /usr/local/bin/fish
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.
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.
[[ $- != *i* ]] && returnsonsuz bir döngü olmamak için gerekli (aynı sayfadan)