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
TERM
kullanıcının .tmux.conf
dosyası tarafından başka bir değere ayarlanabileceği için kötü bir çözümdür . TMUX
Değ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
command
bir komut varlığını denetlemek için - http://man7.org/linux/man-pages/man1/bash.1.html#SHELL_BUILTIN_COMMANDScommand
yerine kullanmak which
için - https://unix.stackexchange.com/a/85250$PS1
Etkileş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.
exec
ifade, 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 tmux
lezzet ile değiştirintmux attach
exec tmux
kullandığım exec tmux new-session -A -s main
bu 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 attach
burada 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 exit
bölümü kaldırın :
[ -z "$TMUX" ] && { tmux attach || exec tmux new-session;}
Ayrıca sarmak gerektiğini unutmayın tmux attach
ile exec
eklemek için hiçbir tmux oturumları olduğunda bu bağlantı kapatılacak neden olur gibi.
chsh
Giriş kabuğunu değiştiren bir komut var. Danışın man chsh
.
tmux
Bir 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, .bashrc
yerine koyun .
Ayrıca sadece tmux
varsayı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 foo
herhangi bir çıktı üretmeyecek.
Yukarıdaki yanıtların hiçbiri benim için işe yaramadı - exec tmux
kabuktan çıkmadan tmux'u kapatmamı engelliyor ( Ctrl
+ ile mi yoksa T
uygulama 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
+ B
dolambaç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 mysession
muhtemelen 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 TMUX
ortam değişkeni belirsiz / boşsa, zaten bir tmux oturumunda değiliz, o yüzden ...
Eğer tmux has-session
sı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.
tmux
Giriş kabuğunuz olarak kullanmak da mümkündür . Ancak bunu yaparsanız, dosyanızda default-shell
gerçek bir kabuk ayarladığınızdan emin olun ~/.tmux.conf
(bu konuda daha fazla bilgi için tmux kılavuzuna bakın).
chsh
Tmux'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 tmux
tam 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/passwd
kullanı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_login
için daha muhtemeldir.
[[ $- != *i* ]] && return
sonsuz bir döngü olmamak için gerekli (aynı sayfadan)