Por que o 'tmux' cria novas janelas como shells de login por padrão?


26

Quando você inicia uma nova sessão tmuxou cria uma nova janela dentro de uma sessão em execução, seu comportamento padrão é executar um shell (ex .:) bashcomo um shell de logon.

Entendo que um shell de login se destina a executar uma rotina de configurações e procedimentos que são de interesse apenas quando você está efetuando login em um sistema . Mas na maioria dos casos (com a exceção de que você pode usar tmux como um shell de login), não é a verdadeira intenção do usuário fazer isso quando ele apenas deseja abrir uma nova janela.

Então, qual é a lógica para tornar esse o comportamento padrão tmux?


A única coisa que a documentação diz sobre o assunto:

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.

Respostas:


24

O shell interativo sem login geralmente nunca sobrevive ao seu shell de login de nível superior; portanto, eles podem esperar que todos os recursos iniciados por ele estejam disponíveis a qualquer momento, mas esse não é o caso do tmux:

  • você faz login no seu shell -> seus scripts de login são executados
  • você executa o tmux, faz alguma coisa, desanexa
  • saia do seu shell de nível superior -> seus scripts de logout são executados
  • A sessão do tmux ainda está em execução, mas qualquer recurso iniciado pelo seu shell de login não está disponível no momento
  • você efetua login novamente e anexa novamente a partir de outro shell de login
  • quaisquer instalações iniciadas pelo novo shell de logon podem não ser visíveis pelo tmux porque ele ainda está sendo executado com o ambiente antigo (mesmo que haja comandos para atualizar o ambiente)

Alguns podem pensar que o tmux start shells de login é desnecessário de qualquer maneira, porque na maioria das configurações não há scripts de logout, e os scripts de login apenas configuram algumas variáveis ​​de ambiente.

Além disso, se você anexar seqüências de caracteres às variáveis ​​de ambiente em seus scripts de login (assim: PATH = $ PATH: / some / other / path) e elas forem executadas mais de uma vez na mesma hierarquia de processos, você terminará duplicadas, e isso é muito chato.

Mas ainda assim eu acho que o padrão faz sentido.

Veja também: http://openbsd-archive.7691.n7.nabble.com/tmux-and-login-shells-td170948.html


2
Obrigado pela resposta e pelo link! Eu acho que eu posso viver com exec shno final ... (eu não tinha pensado nisso.)
— leogama

3
Você tem exemplos concretos de coisas que poderiam quebrar se o tmux não gerasse um shell de logon? Estou pensando em fazer disso meu padrão, mas não quero encontrar problemas difíceis de diagnosticar na linha.
— Carl Patenaude Poulin
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.