O tmux "classifica" a variável PATH?


14

Eu tenho um problema reproduzível:

  1. configurar meu PATH no Bash .profile
  2. iniciar tmux por tmux, tmux attachou qualquer variante
  3. echo $ PATH e veja-o com os mesmos componentes, mas em ordem diferente

Como parar com isso? O que explica isso?

Respostas:


29

Se você está em um Mac e está se perguntando por que /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bincontinua sendo anexado ao PATH ao executar o tmux, é por causa de um utilitário chamado path_helper que é executado no seu /etc/profilearquivo.

Você não pode persuadir facilmente o tmux (ou melhor, o bash) a não fonte /etc/profile(por alguma razão, o tmux sempre roda como um shell de login, o que significa que o / etc / profile será lido), mas você pode garantir que os efeitos do path_helper não estrague o seu caminho.

O truque é garantir que PATH esteja vazio antes que path_helper seja executado. No meu ~/.bash_profilearquivo eu tenho o seguinte:

if [ -f /etc/profile ]; then
    PATH=""
    source /etc/profile
fi

A limpeza do PATH antes da execução do path_helper impedirá que ele prefira o PATH padrão ao PATH (anteriormente) escolhido e permitirá que o restante dos scripts de configuração do bash pessoal (comandos mais abaixo .bash_profile, ou .bashrcse você o tiver originado .bash_profile) para configurar o seu CAMINHO em conformidade.

Espero que faça sentido ...


1
Isso fez totalmente por mim! Eu mesmo a escondi atrás de uma if [ -n "$TMUX" ]cláusula, mas fiquei pensando - qual a importância disso [ -f /etc/profile ], realmente? Não é seguro supor que /etc/profilesempre seja um arquivo regular?
quer

1
@RyanLue Você poderia substituir confortavelmente -fpor -e, mas eu pessoalmente não tentaria obter um arquivo a partir de um script que é executado quando eu faço login, a menos que eu tenha verificado se ele estava lá. Porém, costumo reutilizar meu script bash em muitas máquinas diferentes (e sistemas operacionais), então gosto de garantir que sejam à prova de balas. Eu posso imaginar que outras variantes do Unix possam chamar de outra coisa.
Graham Ashton

OBRIGADO! Isso estava me deixando louco, e colocando esse pequeno trecho no topo da minha ~/.bash_profilesanidade trouxe de volta ao meu feliz mundo tmux.
hoosierEE

Se você não quer mexer com os padrões do sistema, set -g default-command "${SHELL}"em .tmux.confforças tmux usar cascas não login. Eu não vejo o ponto neles, de qualquer maneira, já que você normalmente abre o tmux depois de já estar logado.
seeker_of_bacon 18/01/18

5

Não; a classificação $PATHseria uma coisa muito louca, uma vez que muitos sistemas dependem de sua ordem definida pelo usuário.

No entanto, tmux não iniciar o seu shell no modo "login", causando ~/.profilea ser adquirido novamente . Isso significa que se você tiver algo parecido PATH=/my/dir:/another/dir:$PATHnesse arquivo, isso será feito novamente , resultando em $ PATH contendo /my/dir:/another/dir:/my/dir:/another/dir:(etc.). Para evitar isso, você pode usar outra variável para verificar:

if [ "$_SKIP_PROFILE" ]; then
    return 0
else
    export _SKIP_PROFILE=y
fi

export PATH="/my/dir:/another/dir:$PATH"

0

@Graham Ashton Obrigado pela sua ideia

Minha sugestão seria que você colocasse

if [ -f /etc/profile ]; then
    PATH=""
    source /etc/profile
fi

no seu arquivo .zshrc na parte superior.

VERIFIQUE SE O SEU

export NVM_DIR="$HOME/.nvm"
. "/usr/local/opt/nvm/nvm.sh"

está abaixo.

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.