Краткое содержание

Краткое содержание

Краткое содержание

Когда я создаю новый сеанс 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-commandshell-команда

По умолчанию это пустая строка,который инструктирует 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 настроить это в профиле.


Обновлять: вышеуказанные настройки скопированы из 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, расположении по умолчанию.

Связанный контент