O tmux “ordena” a variável PATH?

11

Eu tenho um problema reproduzível:

  1. configure meu PATH no Bash .profile
  2. inicie o tmux por tmux , tmux attach ou qualquer variante
  3. echo $ PATH e veja com os mesmos componentes, mas em ordem diferente

Como parar isso? O que explica isso?

    
por Robottinosino 01.02.2013 / 12:15

2 respostas

19

Se você estiver em um Mac e estiver se perguntando por que /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin continua sendo prefixado ao PATH ao executar o tmux, é por causa de um utilitário chamado path_helper que é executado a partir do arquivo /etc/profile .

Você não pode facilmente convencer o tmux (ou melhor, bash) a não usar /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 ter certeza que os efeitos do path_helper não estragam com o seu PATH.

O truque é garantir que o PATH esteja vazio antes da execução do path_helper. No meu arquivo ~/.bash_profile , tenho isto:

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

Limpar o PATH antes da execução do path_helper impedirá que ele prefixe o PATH padrão no PATH escolhido (anteriormente) e permitirá o restante dos scripts de configuração do bash pessoal (comandos mais abaixo em .bash_profile ou .bashrc se você de originar .bash_profile ) para configurar seu PATH de acordo.

Espero que isso faça sentido ...

    
por 16.04.2013 / 14:20
5

Não; classificar $PATH seria uma coisa muito louca para fazer, já que muitos sistemas dependem de sua ordem definida pelo usuário.

No entanto, o tmux faz iniciar seu shell no modo "login", fazendo com que ~/.profile seja originado novamente . Isso significa que se você tiver algo como PATH=/my/dir:/another/dir:$PATH nesse 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"
    
por 01.02.2013 / 12:27

Tags