.bashrc / .profile не завантажується в новий сеанс tmux (або вікно) - чому?


94

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

Відповіді:


146

Так, наприкінці вашого .bash_profile, поставте рядок:

. ~/.bashrc

Це автоматично створює файл rc за тих обставин, коли він зазвичай обробляє лише профіль.

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

Ви можете побачити їх у man bashвихідних даних, просто шукайте INVOCATION- можливо, вам знадобиться трохи часу, щоб переварити та декодувати це :-)


2
Проблема цього рішення полягає в тому, що в деяких системах .bashrc викликає .bash_profile.
Хонза

1
Дозвольте мені виправитись: у системах немає .bashrc, який викликає .bash_profile, але вам потрібно переконатися, що ви не робите цього самостійно.
Honza

1
@Honza, це було б найнезвичнішим налаштуванням, оскільки майже завжди все навпаки. Хтось, звичайно, міг домовитись про те, щоб зробити це так, але нам довелося б поставити під сумнів їх осудність :-)
paxdiablo

2
Дійсно, виявилося, що я домовився зробити це так (і забув про це). Ви можете поставити під сумнів мій розум ...;)
Хонза

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". Дякую, друже.
жартівник

Але, ви уявляєте, чому це відбувається? Я раптом помітив це після оновлення з Ubuntu 16.04 до 18.04.2. Це єдина різниця, яку я можу придумати. Крім того, я помітив, що деякі конфігурації зламалися, і мені довелося дотримуватися нового синтаксису (здається, tmux також оновився, але я не пам’ятаю версію tmux, яку я раніше використовував для перевірки).
жартівник

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файл, якщо у вас його немає~
  • В кінці .bash_profileставлять source ~/.bashrcабоsource ~/.profile
  • Перезапустіть tmux.

Тепер проблему слід вирішити.


0

У мене була та сама проблема, і рішення досі не працювали для мене. Рішення, яке в підсумку працювало для мене, можна знайти тут .

Коротше кажучи, у tmuxвікнах / сеансах використовується оболонка входу, яка шукає ~/.profileсеред інших файлів під час запуску.

Я хотів, щоб zsh починався з кожного нового tmuxвікна, тому я розміщував exec zshйого внизу ~/.profile.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.