.bashrc / .profile не загружается в новом сеансе tmux (или окне) - почему?

94

Когда tmux запускается или открывает новое окно, он не загружает мой .profileили .bashrc. Я . ~/.bashrcкаждый раз печатаю . Есть ли способ сделать это автоматически?

Джон Смит
источник

Ответы:

149

Да, в конце вашего .bash_profileпоставьте строку:

. ~/.bashrc

Это автоматически создает файл rc в тех случаях, когда обычно обрабатывается только профиль.

Правила относительно того, когда bashзапускаются определенные файлы, сложны и зависят от типа запускаемой оболочки (вход в систему / без входа в систему, интерактивный или нет и т. Д.), А также от аргументов командной строки и переменных среды.

Вы можете увидеть их на man bashвыходе, просто посмотрите INVOCATION- вам, вероятно, понадобится время, чтобы переварить и расшифровать его :-)

Paxdiablo
источник
2
Проблема с этим решением в том, что в некоторых системах .bashrc вызывает .bash_profile.
Honza
1
Позвольте мне исправить себя: в системах нет .bashrc, вызывающего .bash_profile, но вам нужно убедиться, что вы делаете это не сами.
Honza
1
@Honza, это была бы самая необычная установка, потому что почти всегда все наоборот. Кто-то, конечно, мог бы организовать это таким образом, но мы должны поставить под сомнение их здравомыслие :-)
paxdiablo
2
Действительно, оказалось, что я так устроил (и забыл об этом). Вы можете сомневаться в моем здравом уме ...;)
Honza
3
Я подумал, что это был вопрос ....bashrc/.profile is not loaded on new tmux session (or window) — why?
dylnmc
16

Запуск bash явно сработал для меня, добавив эту строку в мой файл ~ / .tmux.conf:

set-option -g default-command "exec /bin/bash"
Кит
источник
1
Это сработало для меня! Однако вам не нужна часть "exec". Я добавил следующую строку My ~/.tmux.conf : set -g default-command "/bin/bash". Спасибо друг.
joker
Но знаете ли вы, почему это происходит? Я вдруг заметил это после обновления с Ubuntu 16.04 до 18.04.2. Это единственная разница, о которой я могу думать. Кроме того, я заметил, что некоторые конфигурации сломались, и мне пришлось соблюдать новый синтаксис (похоже, что tmux тоже обновился, но я не помню версию tmux, которую я раньше использовал для проверки).
joker
6

Предыдущие ответы предлагали решения, но не объясняли причину. Вот.

Это связано с файлами инициализации 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 настроить это в своем профиле.

Ссылки

Симба
источник
1

Из этой ветки:

кажется, использование .bash_profileбудет работать.

icyrock.com
источник
Ссылка просто дает совет по использованию:$echo case $- in *i*) . ~/.bashrc;; esac >> .bash_profile
Kjell
1

Решение, которое сработало для меня, следующее:

  • Создайте .bash_profileфайл, если его нет в~
  • В конце .bash_profileпоставить source ~/.bashrcилиsource ~/.profile
  • Перезагрузите tmux.

Теперь проблема должна быть исправлена.

Жако Малан
источник
0

У меня была та же проблема, и решения пока не помогли. Решение, которое в итоге сработало для меня, можно найти здесь .

Короче говоря, tmuxокна / сеансы используют оболочку входа в систему, которая ~/.profileпри запуске ищет среди других файлов.

Я хотел, чтобы zsh запускался с каждым новым tmuxокном, поэтому я поместил exec zshвнизу своего файла ~/.profile.

Келли Лютце
источник