3
  • Система: macOS 10.12
  • Версия Tmux: 2.6

Как пользователь macports, у меня есть /opt/local/bin в начале моего PATH . Однако при запуске tmux он использует /bin/bash вместо /opt/local/bin/bash , действительно, переменная SHELL также указывает на это. Это смущает меня и вызывает сбой некоторых настроек .bashrc , поскольку версия устарела.

Я знаю, что могу установить путь к оболочке tmux по умолчанию set-option -g default-shell , но я использую свой .tmux.conf в разных системах, поэтому он должен быть независим от ОС и просто использовать оболочку, которую можно получить при выполнении bash ,

У меня есть все мои настройки в .bashrc и источник этого файла в .bash_login и .bash_profile , поэтому мой PATH должен быть доступен для tmux .

Как я могу решить это?

Кажется, что SHELL это всегда /bin/bash , не знаю почему. Мой терминал настроен на запуск /opt/local/bin/bash -l при запуске.

1 ответ1

2

Вот что говорит man 1 tmux о default-shell по умолчанию в Linux. Я ожидаю, что tmux в macOS будет вести себя аналогично:

default-shell path

Укажите оболочку по умолчанию. Это используется в качестве оболочки входа в систему для новых окон, когда для параметра default-command задано пустое значение, и оно должно быть полным путем к исполняемому файлу. При запуске tmux пытается установить значение по умолчанию из первой подходящей переменной среды SHELL , оболочки, возвращаемой getpwuid(3) или /bin/sh . Эта опция должна быть настроена, когда tmux используется в качестве оболочки для входа.

Как видите, ни один из этих методов не использует $PATH . Дополнительно из руководства по bash:

SHELL

Полный путь к оболочке хранится в этой переменной среды. Если он не задан при запуске оболочки, Bash присваивает ему полный путь к логину текущего пользователя.

В любом случае важна ваша оболочка для входа, а не /opt/local/bin/bash . Вы можете переписать SHELL с помощью $BASH в вашем .bashrc:

SHELL="$BASH"

Примечание: я не проверял это против побочных эффектов. В этом есть одна особенность (по крайней мере, в моем Kubuntu). Если tmux уже запущен для вашего пользователя, то изменения в SHELL не повлияют на дополнительные вызовы. Это потому, что дополнительный вызов tmux работает вместе с первым tmux и это первый tmux который обрабатывает все (я вижу это с помощью pstree); его среда не меняется, когда вы вызываете дополнительную.

Однако этот способ вызова tmux должен учитывать ваш $PATH , независимо от $SHELL т. Д .:

tmux new-session bash

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .