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.