Por que o tmux ignora o PATH ao iniciar o shell?

3
  • Sistema: macOS 10.12
  • Versão do Tmux: 2.6

Como usuário do macports, tenho /opt/local/bin no início do meu PATH . No entanto, ao iniciar tmux , ele usa /bin/bash em vez de /opt/local/bin/bash , na verdade, a variável SHELL também aponta para lá. Isso me confunde e faz com que algumas configurações de .bashrc sejam interrompidas porque a versão está desatualizada.

Eu sei que posso definir o caminho para o shell padrão do tmux set-option -g default-shell , mas eu uso meu .tmux.conf em sistemas diferentes, portanto ele deve ser independente do sistema operacional e simplesmente usar o shell que seria obtido ao executar bash .

Eu tenho todas as minhas configurações em .bashrc e obtenho este arquivo em .bash_login und .bash_profile , então meu PATH deve estar disponível para tmux .

Como posso resolver isso?

Parece que SHELL é sempre /bin/bash , não tenho certeza do motivo. Meu terminal está configurado para iniciar /opt/local/bin/bash -l na inicialização.

    
por oarfish 24.12.2017 / 11:59

1 resposta

2

Isso é o que man 1 tmux diz sobre default-shell no Linux. Espero que tmux no macOS se comporte de forma semelhante:

default-shell path

Specify the default shell. This is used as the login shell for new windows when the default-command option is set to empty, and must be the full path of the executable. When started tmux tries to set a default value from the first suitable of the SHELL environment variable, the shell returned by getpwuid(3), or /bin/sh. This option should be configured when tmux is used as a login shell.

Como você pode ver, nenhum desses métodos usa $PATH . Além disso, em bash manual :

SHELL

The full pathname to the shell is kept in this environment variable. If it is not set when the shell starts, Bash assigns to it the full pathname of the current user’s login shell.

De qualquer forma, o seu shell de login é o que importa e não é /opt/local/bin/bash . Você pode considerar a substituição de SHELL por $BASH em seu .bashrc :

SHELL="$BASH"

Nota: Eu não testei isso contra efeitos colaterais. Há uma peculiaridade (pelo menos no meu Kubuntu) com isso. Se tmux já estiver sendo executado para seu usuário, as alterações em SHELL não afetarão as chamadas adicionais. Isso ocorre porque uma invocação adicional de tmux funciona junto com o primeiro tmux e é o primeiro tmux que lida com tudo (eu posso ver isso com pstree ); seu ambiente não muda quando você invoca um adicional.

No entanto, essa maneira de chamar tmux deve honrar seu $PATH , independentemente de $SHELL etc .:

tmux new-session bash
    
por 24.12.2017 / 13:55