Нові сесії tmux не виводять файл bashrc


17

Підсумок

Коли я створюю новий сеанс tmux, моя підказка вимикається з конфігурації bash за замовчуванням, і я маю вручну запустити source ~/.bashrcдля мого налаштованого запиту.

Аналіз

Я використовую машину RHEL 7. Я почав помічати цю поведінку після того, як час назад оновився, але не став до цього часу задавати питання (і не впевнений, яке оновлення почалося навколо).

Наприклад, я налаштував своє підказку таким чином:

[user@hostname ~]$

Щоразу, коли я запускаю новий tmux сеанс, він використовує те, що видається базовим за замовчуванням:

-sh-4.2$

Швидкий пробіг source ~/.bashrcзавжди виправляє проблему, але прикро, що мені доводиться це робити щоразу, коли хочу виправити щось маленьке. Будь-які ідеї, як змусити tmux зробити це автоматично знову?

Якщо вам потрібна додаткова інформація, я з радістю надаю.

tmux.conf

Для довідки, я маю свій tmux.confфайл нижче, хоча навряд чи можна назвати звичайним.

setw -g mode-keys vi

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

Відповіді:


19

Наскільки я знаю, за замовчуванням tmuxпрацює оболонка для входу. Коли bashвикликається як інтерактивна оболонка, він шукає ~/.bash_profile, ~/.bash_loginі ~/.profile. Тож треба ставитиsource ~/.bashrc один із цих файлів.

Ще один спосіб вирішити цю проблему - помістити у свій файл .tmux.confрядок:

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

1
Я додав source ~/.bashrcрядок до свого .bash_profile, спробував вийти та повернутися, створити новий сеанс tmux, але жодних змін. Будь-які ідеї?
Джастін У. Флорі

1
Спробуйте ввести у свій файл .tmux.confрядок set-option -g default-shell "/bin/bash". Це має вирішити ваше питання (принаймні, я сподіваюся, що так)!
andreatsh

Після перезавантаження конфігурації tmux це вирішило мою проблему! Хочете змінити свою відповідь або створити нову? Я був би радий відзначити це як прийняте. :)
Джастін В. Флорі

Ти добрий, я швидко змінив свою відповідь!
andreatsh

2
Примітка для користувачів macOS: якщо ви встановили bashчерез Homebrew і це не працює, перейдіть "/bin/bash"на "/usr/local/bin/bash".

5

Це пов’язано з файлами init Bash. За замовчуванням ~/.bashrcвикористовується в інтерактивній оболонці без входу . Він не буде розміщений у оболонці входу. Tmux використовує оболонку входу за замовчуванням. Отже, снаряди, запущені tmux пропуском ~/.bashrc.

default-command команда оболонки

За замовчуванням - це порожня рядок, яка вказує tmux створити оболонку входу, використовуючи значення default-shellпараметра.

Файли Init для Bash,

  1. режим входу:
    1. /etc/profile
    2. ~/.bash_profile, ~/.bash_login, ~/.profile(Тільки перший, який існує)
  2. інтерактивний невхід в систему :
    1. /etc/bash.bashrc (деякі Linux; не на Mac OS X)
    2. ~/.bashrc
  3. неінтерактивний:
    1. вихідний файл у $BASH_ENV

Рішення

Дивна інтерактивна вимога завантаження без входу в Інтернет заплутує людей і в інших ситуаціях. Кращим рішенням є зміна вимоги завантаження в ~/.bashrcякості тільки в інтерактивному режимі , що це саме те , що деякі дистрибутиви, такі як Ubuntu, роблять.

# 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

Це має бути рішення, яке ви бажаєте. І я рекомендую кожному користувачу Bash налаштувати це у профілі.

Список літератури


2

Додавання до .tmux.conf:

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

НЕ дає бажаного результату.

Тільки при додаванні source "$HOME/.bashrc"до ~/.bash_profileнаміченого результату досягається.

Це буде працювати над активним сеансом tmux при відкритті нового вікна або області, а також при від'єднанні та відкритті нового сеансу tmux.

Тестовано на:

VERSION="16.04.2 LTS (Xenial Xerus)"
tmux 2.1
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.