Почему 'tmux' по умолчанию создает новые окна как оболочки входа?

26

Когда вы запускаете новый сеанс tmuxили создаете новое окно внутри запущенного сеанса, его поведение по умолчанию - запускать оболочку (например, bash) в качестве оболочки входа в систему.

Я понимаю, что оболочка входа предназначена для выполнения процедуры конфигураций и процедур, которые представляют интерес только при входе в систему . Но в большинстве случаев (за исключением того, что вы можете использовать tmux в качестве оболочки для входа в систему) пользователь не намерен делать это, когда он просто хочет открыть новое окно.

Так в чем же причина того, чтобы сделать это поведением по умолчанию tmux?


Единственное, что в документации сказано по этому поводу:

default-command  shell-command
        Set the command used for new windows (if not specified when the
        window is created) to shell-command, which may be any sh(1)
        command.  The default is an empty string, which instructs tmux
        to create a login shell using the value of the default-shell
        option.
leogama
источник

Ответы:

24

Интерактивная оболочка без регистрации обычно никогда не переживает вашу оболочку верхнего уровня, поэтому они могут ожидать, что любые запущенные ею средства будут доступны в любое время, но в случае с tmux это не так:

  • Вы входите в свою оболочку -> запускаются ваши сценарии входа
  • ты запускаешь tmux, делаешь что-то, отрываешься
  • выйдите из оболочки верхнего уровня -> ваши сценарии выхода будут запущены
  • Сессия tmux все еще работает, но все средства, запущенные вашей оболочкой входа, в настоящее время недоступны
  • Вы снова авторизуетесь и повторно подключаетесь из другой оболочки
  • любые средства, запущенные новой оболочкой входа в систему, могут быть не видны tmux, потому что она все еще работает со старой средой (даже если есть команды для обновления среды)

Кто-то может подумать, что запускать tmux-оболочку входа в систему в любом случае не нужно, поскольку в большинстве установок нет сценариев выхода из системы, а сценарии входа в систему просто устанавливают некоторые переменные среды.

Более того, если вы добавляете строки к переменным среды в ваших сценариях входа в систему (например: PATH = $ PATH: / some / other / path), и они запускаются более одного раза в одной и той же иерархии процессов, вы получаете дубликаты, и это самый раздражающий.

Но все же я склонен думать, что дефолт имеет смысл.

Смотрите также это: http://openbsd-archive.7691.n7.nabble.com/tmux-and-login-shells-td170948.html

Лео
источник
2
Спасибо за ответ и за ссылку! Я думаю, что я могу жить exec shв конце ... (я не думал об этом.)
Leogama
3
Есть ли у вас конкретные примеры того, что могло бы сломаться, если бы tmux не породил оболочку входа? Я думаю сделать это по умолчанию, но я не хочу сталкиваться с трудностями в диагностике.
Карл Патеноуд Пулин