Виртуальная консоль 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 Panes идут в тот же каталог, что и текущая панель; новые окна tmux переходят в домашнюю директорию?
  • Сбросить фон до прозрачного с помощью tmux?
  • Не удается восстановить со спящего tmux во время сеанса SSH
  • tmux на удаленном компьютере не получает правильный префикс + клавиши со стрелками
  • Обеспечить постоянную работу службы systemd
  • Не удается правильно использовать мышь при запуске vim в tmux
  • tmux блокирует некоторые вещи на моем Mac
  • Окно Vim в Tmux
  • Получение текущего использования памяти сеанса tmux
  • Systemd с rtorrent в tmux
  • Interesting Posts
    Linux и Unix - лучшая ОС в мире.