Краткое содержание
Когда я создаю новый сеанс 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"
решение1
Это связано с файлами инициализации Bash. По умолчанию ~/.bashrc
используется винтерактивный, без входа в системуshell. Он не будет запущен в оболочке входа. Tmux используетоболочка входапо умолчанию. Поэтому оболочки, запущенные tmux, пропускают ~/.bashrc
.
default-command
shell-командаПо умолчанию это пустая строка,который инструктирует tmux создать оболочку входаиспользуя значение опциона
default-shell
.
Файлы инициализации для Bash,
- Режим входа:
/etc/profile
~/.bash_profile
,~/.bash_login
,~/.profile
(только первый существующий)
- интерактивный не-логин:
/etc/bash.bashrc
(некоторые Linux; не на Mac OS X)~/.bashrc
- неинтерактивный:
- исходный файл в
$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 настроить это в профиле.
Обновлять: вышеуказанные настройки скопированы из Ubuntu. Кажется, они выбирают загрузку .bashrc
в оболочке входа, независимо от того, находится ли она в интерактивной оболочке или нет.
Если вы хотите обнаружить интерактивную оболочку, используйте $PS1
.
if [ -n "$BASH_VERSION" -a -n "$PS1" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
Рекомендации
решение2
Насколько мне известно, по умолчанию tmux
запускает оболочку входа. Когда bash
вызывается как интерактивная оболочка входа, она ищет ~/.bash_profile
, ~/.bash_login
, и ~/.profile
. Поэтому вам нужно вставить source ~/.bashrc
один из этих файлов.
Другой способ решения этой проблемы — добавить в файл .tmux.conf
строку:
set-option -g default-shell "/bin/bash"
решение3
Добавляем следующее .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
решение4
Измените ваш $HOME/.tmux.conf
файл следующим образом:
set-option -g default-shell "/usr/bin/bash"
set-option -g default-command bash
Это должно покрыть все. Пока вы этим занимаетесь, почему бы не поместить dotfile в $HOME/.config/tmux
папку, где он должен быть без точки. И добавьте вывод цвета и привязку клавиши перезагрузки к $HOME/.config/tmux/tmux.conf
:
set -g default-terminal "screen256color"
bind r source-file "${HOME}/.config/tmux/tmux.conf"
Если tmux -V
< 3.1, добавьте псевдоним для $HOME/.bashrc
загрузки файла конфигурации из этого места:
alias tmux="tmux -f ${HOME}/.config/tmux/tmux.conf"
Или сделайте его общесистемной конфигурацией в /etc/tmux.conf
, расположении по умолчанию.