.bashrc / .profile nie są ładowane w nowej sesji (lub oknie) tmux - dlaczego?

94

Gdy tmux uruchamia się lub otwiera nowe okno, nie ładuje mojego .profileani .bashrc. Za . ~/.bashrckażdym razem piszę . Czy istnieje sposób, aby stało się to automatycznie?

John Smith
źródło

Odpowiedzi:

149

Tak, na końcu wpisz .bash_profilewiersz:

. ~/.bashrc

To automatycznie pobiera plik rc w tych okolicznościach, w których normalnie przetwarzałby tylko profil.

Zasady dotyczące bashuruchamiania niektórych plików są skomplikowane i zależą od typu uruchamianej powłoki (logowanie / brak logowania, interaktywna lub nie, itd.), Wraz z argumentami wiersza poleceń i zmiennymi środowiskowymi.

Możesz je zobaczyć na man bashwyjściu, po prostu poszukaj INVOCATION- prawdopodobnie będziesz potrzebować trochę czasu, aby to przetrawić i zdekodować :-)

paxdiablo
źródło
2
Problem z tym rozwiązaniem polega na tym, że w niektórych systemach .bashrc wywołuje .bash_profile.
Honza
1
Pozwól, że poprawię się: systemy nie mają .bashrc wywołującego .bash_profile, ale musisz się upewnić, że nie robisz tego sam.
Honza
1
@Honza, to byłaby najbardziej niezwykła konfiguracja, ponieważ prawie zawsze jest odwrotnie. Ktoś z pewnością mógłby to załatwić, ale musielibyśmy kwestionować jego zdrowie psychiczne :-)
paxdiablo
2
Rzeczywiście okazało się, że tak to załatwiłem (i zapomniałem o tym). Możesz kwestionować mój rozsądek ...;)
Honza
3
Myślałem, że to jest pytanie ....bashrc/.profile is not loaded on new tmux session (or window) — why?
dylnmc
16

Uruchamianie basha wyraźnie zadziałało dla mnie, dodając tę ​​linię do mojego pliku ~ / .tmux.conf:

set-option -g default-command "exec /bin/bash"
Keith
źródło
1
To zadziałało dla mnie! Jednak nie potrzebujesz części „exec”. I dodaje następujący wiersz na moim ~/.tmux.conf : set -g default-command "/bin/bash". Dzięki stary.
joker
Ale czy masz pojęcie, dlaczego tak się dzieje? Nagle zauważyłem to po aktualizacji z Ubuntu 16.04 do 18.04.2. To jedyna różnica, jaką przychodzi mi do głowy. Zauważyłem też, że niektóre konfiguracje się zepsuły i musiałem dostosować się do nowej składni (wygląda na to, że tmux również został zaktualizowany, ale nie pamiętam wersji tmux, której wcześniej użyłem do weryfikacji).
joker
6

Wcześniejsze odpowiedzi dostarczały rozwiązań, ale nie wyjaśniały przyczyny. Tutaj jest.

Jest to związane z plikami init Bash. Domyślnie ~/.bashrcjest używany w interaktywnej powłoce bez logowania . Nie będzie pochodzić z powłoki logowania. Tmux domyślnie używa powłoki logowania . W związku z tym powłoki uruchamiane przez tmux pomijają ~/.bashrc.

default-command polecenie-powłoki

Wartość domyślna to pusty ciąg, który instruuje tmux, aby utworzył powłokę logowania przy użyciu wartości default-shellopcji.

Pliki init dla Bash,

  1. tryb logowania:
    1. /etc/profile
    2. ~/.bash_profile, ~/.bash_login, ~/.profile(Tylko pierwsza, że istnieje)
  2. interaktywny brak logowania :
    1. /etc/bash.bashrc (niektóre Linux; nie w Mac OS X)
    2. ~/.bashrc
  3. nieinteraktywne:
    1. plik źródłowy w formacie $BASH_ENV

Dziwne interaktywne wymaganie ładowania bez logowania dezorientuje ludzi również w innych sytuacjach. Najlepszym rozwiązaniem jest zmiana wymogu ładowania ~/.bashrcjak tylko interaktywny , który jest dokładnie to, co niektóre dystrybucje, takie jak Ubuntu, robisz.

# 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

To powinno być rozwiązanie, którego pragniesz. I polecam każdemu użytkownikowi Bash skonfigurowanie tego w profilu.

Bibliografia

Simba
źródło
1

Z tego wątku:

wydaje się, że użycie .bash_profilebędzie działać.

icyrock.com
źródło
Link daje tylko radę, aby użyć:$echo case $- in *i*) . ~/.bashrc;; esac >> .bash_profile
Kjell
1

Rozwiązanie, które zadziałało dla mnie, jest następujące:

  • Utwórz .bash_profileplik, jeśli go nie masz w~
  • Pod koniec .bash_profileput source ~/.bashrclubsource ~/.profile
  • Uruchom ponownie tmux.

Teraz problem powinien zostać rozwiązany.

Jaco Malan
źródło
0

Miałem ten sam problem i dotychczasowe rozwiązania nie działały. Rozwiązanie, które mi się udało, znajdziesz tutaj .

Krótko mówiąc, tmuxokna / sesje używają powłoki logowania, która ~/.profilepodczas uruchamiania szuka pośród innych plików.

Chciałem, aby zsh zaczynał się od każdego nowego tmuxokna, więc umieściłem exec zshna dole mojego ~/.profile.

Kellie Lutze
źródło