Nowe sesje tmux nie generują pliku bashrc

17

streszczenie

Kiedy tworzę nową sesję tmux, mój monit wyciąga się z domyślnej konfiguracji bash i muszę ręcznie uruchomić source ~/.bashrcdla mojego niestandardowego monitu.

Analiza

Używam maszyny RHEL 7. Zacząłem zauważać to zachowanie po aktualizacji bash, ale do tej pory nie zadałem pytania (i nie jestem pewien, która aktualizacja zaczęła się dziać).

Na przykład dostosowałem mój monit, aby wyglądał następująco:

[user@hostname ~]$

Ilekroć rozpoczynam nową sesję tmux, używa ona domyślnej opcji bash:

-sh-4.2$

Szybki przegląd source ~/.bashrczawsze rozwiązuje problem, ale denerwujące jest to, że muszę to robić za każdym razem, gdy chcę naprawić coś małego. Jakieś pomysły na to, jak zmusić Tmux do zrobienia tego automatycznie?

Jeśli potrzebuję więcej informacji, chętnie udzielę.

tmux.conf

Dla porównania mam tmux.confponiżej mój plik, chociaż nie jest to tak zwane niestandardowe.

setw -g mode-keys vi

# reload tmux.conf
bind r source-file ~/.tmux.conf \; display-message " ✱ ~/.tmux.conf is reloaded"
Justin W. Flory
źródło

Odpowiedzi:

19

O ile mi wiadomo, domyślnie tmuxdziała powłoka logowania. Kiedy bashjest wywoływana jako interaktywną powłokę logowania, szuka ~/.bash_profile, ~/.bash_logini ~/.profile. Musisz więc umieścić source ~/.bashrcjeden z tych plików.

Innym sposobem rozwiązania tego problemu jest wstawienie do pliku .tmux.confwiersza:

set-option -g default-shell "/bin/bash"
andreatsh
źródło
1
Dodałem source ~/.bashrcwiersz do mojej .bash_profile, próbowałem wylogować się i zalogować ponownie, utworzyć nową sesję tmux, ale bez zmian. Jakieś pomysły?
Justin W. Flory
1
Spróbuj umieścić w swoim pliku .tmux.conflinię set-option -g default-shell "/bin/bash". To powinno rozwiązać twój problem (przynajmniej mam taką nadzieję)!
andreatsh
Po przeładowaniu konfiguracji tmux rozwiązało to mój problem! Chcesz zmodyfikować swoją odpowiedź lub utworzyć nową? Z przyjemnością oznaczę to jako zaakceptowane. :)
Justin W. Flory
Jesteś miły, szybko zmodyfikowałem swoją odpowiedź!
andreatsh
2
Uwaga dla użytkowników systemu macOS: jeśli zainstalowałeś bashprzez Homebrew i to nie działa, zmień "/bin/bash"na "/usr/local/bin/bash".
5

Jest to związane z plikami inicjującymi Bash. Domyślnie ~/.bashrcjest używany w interaktywnej powłoce bez logowania . Nie będzie pozyskiwany w powłoce logowania. Tmux domyślnie używa powłoki logowania . Stąd powłoki rozpoczęte przez tmux skip ~/.bashrc.

default-command polecenie powłoki

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

Pliki początkowe 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. nieinteraktywny:
    1. plik źródłowy w $BASH_ENV

Rozwiązanie

Dziwne, interaktywne wymaganie ładowania bez logowania myli 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 Bashowi skonfigurowanie tego w profilu.

Bibliografia

Simba
źródło
2

Dodanie następujących elementów do .tmux.conf:

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

NIE daje pożądanego rezultatu.

Dopiero po dodaniu source "$HOME/.bashrc"do ~/.bash_profilezamierzonego wyniku zostanie osiągnięty.

Będzie to działać na aktywnej sesji tmux podczas otwierania nowego okna lub panelu, a także podczas odłączania i otwierania nowej sesji tmux.

Testowane na:

VERSION="16.04.2 LTS (Xenial Xerus)"
tmux 2.1
Andres Salgado
źródło