Виртуальная консоль TTY + tmux: кажется, что ~ / .bashrc запускается более одного раза?

Я предпочитаю использовать tmux, а не виртуальную консоль linux по умолчанию (то есть, что использует agetty ), поэтому я помещаю это в ~/.bashrc чтобы tmux запускался автоматически при входе в TTY:

 if [[ "$(tty)" == /dev/tty* ]]; then tmux -u fi 

Сначала кажется, что это работает: tmux запускается, как только я вхожу в систему. Однако, когда я выхожу из tmux, tmux сразу запускается во второй раз! Вот полное поведение:

  • ctrl + alt + f2
  • Авторизоваться
  • По умолчанию запрос кратковременно отображается перед запуском tmux
  • Я в tmux
  • ctrl + d
  • Текст [exited] кратковременно мигает, а затем снова вернусь в tmux
  • ctrl + d
  • Назад в терминал по умолчанию без tmux
  • ctrl + d
  • Теперь я полностью вышел из системы

Я не могу отследить это – я пробовал записывать всевозможные вещи, устанавливая переменные среды, глядя на $SHLVL . На самом деле это выглядит как .bashrc запускается как 7 раз при каждом входе в систему!

Обычно я не использую tmux из X (я просто использую Konsole), но я попытался настроить bashrc на запуск tmux для всех сеансов без tmux, и это двойное поведение не произошло в Konsole.

Я использую:

  • Arch Linux (4.8.13-1)
  • agetty
  • tmux
  • Bashish
  • полный ~/.bashrc и другие конфиги (файл ~/.bash_profile ): https://gist.github.com/tobek/c8038c207f318528c3157b4a402aa2d9 (я попытался удалить бахиш, но поведение осталось)

Что может быть причиной этого?

One Solution collect form web for “Виртуальная консоль TTY + tmux: кажется, что ~ / .bashrc запускается более одного раза?”

Исправить # 1:

Не удалось отследить его, но удалось исправить это следующим хаком в моем ~/.bashrc :

 if [ -z "$user_bashrc_already_run" ]; then user_bashrc_already_run=1 else return fi 

Исправить # 2:

Удалось правильно отслеживать это. Поскольку TTY является интерактивной оболочкой входа, он запускал оба /etc/profile и ~/.profile (эмулятор терминала в X не загружает ни один из них, поскольку он не является оболочкой входа). В моем случае (и я понятия не имею, почему, может быть, установка Bashish или что-то еще) эти файлы были одинаковыми, и оба источника все скрипты в /etc/profile.d , который в моем случае включал один скрипт, который содержит источники ~/.bashrc ,

Исправлена ​​проблема удаления всего дубликата кода из ~/.profile .

Чтение раздела «Вызов» из man bash и вопросов, таких как https://serverfault.com/questions/261802/what-are-the-functional-differences-between-profile-bash-profile-and-bashrc, являются полезными.


В случае, если кто-то приземляется здесь с аналогичной проблемой, вот лучший способ запустить tmux, потому что он заставляет оболочку заменяться на tmux вместо запуска tmux в качестве дополнительной оболочки:

 if command -v tmux>/dev/null; then # check if tmux command exists if [[ "$(tty)" =~ /dev/tty ]] && [[ ! "$TERM" =~ screen ]] && [ -z "$TMUX" ]; then # We're on a TTY and *not* in tmux exec tmux -u fi fi 

И я решил поместить это в свой ~/.profile потому что я хочу, чтобы это выполнялось в оболочках входа, а не в недействительных командах. (Обратите внимание, что если у вас есть ~/.bash_profile , bash будет запускать это вместо ~/.profile .)

  • Почему мой второй сеанс tmux не показан в ps aux или htop, но в tmux list-session это?
  • Запускать tmux всегда, когда я открываю терминал
  • Как установить пользовательские переменные в tmux?
  • выйти из окна tmux без выхода из программы терминала
  • Почему showconsolefont имеет разные выходные данные в tmux?
  • Tmux создать окно, если оно еще не существует
  • Получение tmux для копирования буфера в буфер обмена
  • Перенос Ctrl-P в Ctrl-O для получения предыдущей команды?
  • Как я могу предотвратить блокировку tmux при прокрутке вверх?
  • Почему я должен повторно устанавливать env vars в tmux при повторном подключении?
  • Как сделать сеансы tmux count от 1 вместо 0?
  • Невозможно запустить сценарий tmux при загрузке
  • Linux и Unix - лучшая ОС в мире.