Новые сессии tmux не являются исходным файлом bashrc


17

Резюме

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

Анализ

Я использую машину RHEL 7. Я начал замечать это поведение после обновления bash некоторое время назад, но до сих пор не удосужился задать вопрос (и не уверен, какое обновление это начало происходить вокруг).

Например, я настроил мое приглашение так:

[user@hostname ~]$

Всякий раз, когда я начинаю новый сеанс tmux, он использует то, что кажется bash по умолчанию:

-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: если вы установили bashHomebrew и это не работает, измените "/bin/bash"на "/usr/local/bin/bash".

5

Это связано с файлами инициализации Bash. По умолчанию ~/.bashrcиспользуется в интерактивной оболочке без входа в систему . Это не будет получено в оболочке входа в систему. Tmux по умолчанию использует оболочку входа в систему . Следовательно, оболочки, запущенные tmux skip ~/.bashrc.

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

По умолчанию используется пустая строка, которая указывает tmux создать оболочку входа в систему, используя значение default-shellпараметра.

Файлы инициализации для 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.