Yeni tmux oturumları bashrc dosyasını kaynaklamaz


17

özet

Yeni bir tmux oturumu oluşturduğumda, istemim varsayılan bir bash yapılandırmasından çekiyor ve source ~/.bashrcözelleştirilmiş istemim için el ile çalıştırmam gerekiyor.

analiz

Bir RHEL 7 makinesi kullanıyorum. Bir süre önce bir bash güncellemesinden sonra bu davranışı fark etmeye başladım, ancak şu ana kadar soruyu sormayı başaramadım (ve bunun hangi güncellemenin başladığına emin değilim).

Örneğin, istemimi şu şekilde özelleştirdim:

[user@hostname ~]$

Ne zaman yeni bir tmux oturumu başlattığınızda, bash varsayılan gibi görünen kullanır:

-sh-4.2$

Kısa bir süre source ~/.bashrcsorunu her zaman düzeltir, ancak küçük bir şeyi düzeltmek istediğim her seferinde bunu yapmak zorundayım. Tmux'un bunu otomatik olarak tekrar yapmasıyla ilgili bir fikrin var mı?

Daha fazla bilgiye ihtiyaç duyulursa, memnuniyetle sağlarım.

tmux.conf

Referans için, benim tmux.confdosyam var, ancak özel olarak adlandırabileceğiniz pek zor değil.

setw -g mode-keys vi

# reload tmux.conf
bind r source-file ~/.tmux.conf \; display-message " ✱ ~/.tmux.conf is reloaded"

Yanıtlar:


19

Bildiğim kadarıyla, varsayılan olarak tmuxbir giriş kabuğu çalıştırır. Ne zaman bashinteraktif bir giriş kabuğu olarak çağrıldığında, bu arar ~/.bash_profile, ~/.bash_loginve ~/.profile. Yani source ~/.bashrcbu dosyalardan birini koymalısınız .

Bu sorunu çözmenin başka bir yolu da dosyanıza .tmux.confsatır koymaktır :

set-option -g default-shell "/bin/bash"

1
source ~/.bashrcSatırı ekledim, .bash_profileoturumu kapatıp tekrar açmayı denedim, yeni bir tmux oturumu oluşturdum, ancak değişiklik yapmadım. Herhangi bir fikir?
Justin W. Flory

1
Dosyanıza .tmux.confsatırı koymaya çalışın set-option -g default-shell "/bin/bash". Bu, sorununuzu çözmelidir (en azından umarım)!
andreatsh

Tmux yapılandırmamı yeniden yükledikten sonra bu sorunumu çözdü! Cevabınızı değiştirmek mi yoksa yeni bir cevap mı oluşturmak istiyorsunuz? Kabul edildi olarak işaretlemekten memnuniyet duyarım. :)
Justin W. Flory

Naziksiniz, cevabımı çabucak değiştirdim!
16:15, andreatsh

2
MacOS kullanıcıları için Not: Yüklediğiniz eğer bashHomebrew aracılığıyla ve bu, değişiklik çalışmaz "/bin/bash"için "/usr/local/bin/bash".

5

Bu, Bash init dosyalarıyla ilgilidir. Varsayılan olarak, ~/.bashrcbir kullanılır interaktif olmayan giriş kabuğu. Bir giriş kabuğunda alınmaz. Tmux varsayılan olarak bir oturum açma kabuğu kullanır . Bu nedenle, tmux skip tarafından başlatılan mermiler ~/.bashrc.

default-command Kabuk-komut

Varsayılan, tmux'adefault-shell seçeneğin değerini kullanarak bir oturum açma kabuğu oluşturma talimatı veren boş bir dizedir .

Bash için dosyaları başlat,

  1. giriş modu:
    1. /etc/profile
    2. ~/.bash_profile, ~/.bash_login, ~/.profile(Var olan tek birincisi)
  2. etkileşimli giriş yapmama :
    1. /etc/bash.bashrc (bazı Linux; Mac OS X'te değil)
    2. ~/.bashrc
  3. etkileşimli olmayan:
    1. kaynak dosya $BASH_ENV

Çözüm

Tuhaf etkileşimli, giriş yapmayan yükleme gereksinimi, diğer durumlarda da insanları karıştırır. En iyi çözüm , yükleme gereksinimini yalnızca etkileşimli~/.bashrc olarak değiştirmek , yani Ubuntu gibi bazı dağıtımların yaptığı şey tam olarak budur.

# write content below into ~/.profile, or ~/.bash_profile

# if running bash
if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
    . "$HOME/.bashrc"
    fi
fi

İstediğiniz çözüm bu olmalıdır. Her Bash kullanıcısının bunu profilde ayarlamasını öneriyorum.

Referanslar


2

Aşağıdakilere ekleniyor .tmux.conf:

set-option -g default-shell "/bin/bash"

İstenen sonucu VERMEZ .

Sadece eklerken source "$HOME/.bashrc"için ~/.bash_profileamaçlanan sonucu elde edilir.

Bu, yeni bir pencere veya bölmeyi açarken ve ayrıca yeni bir tmux oturumu açarken ve açarken etkin bir tmux oturumunda çalışır.

Test tarihi:

VERSION="16.04.2 LTS (Xenial Xerus)"
tmux 2.1
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.