Questão Onde o $ PATH é definido no OS X 10.6 Snow Leopard?


Eu digito echo $PATH na linha de comando e obter

/opt/local/bin:/opt/local/sbin:/Users/andrew/bin:/usr/local/bin:/usr/local/mysql/bin:/usr/local/pear/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin:/opt/local/bin:/usr/local/git/bin

Eu estou querendo saber onde isso está ficando definido desde o meu .bash_login o arquivo está vazio.

Estou particularmente preocupado que, depois de instalar o MacPorts, ele tenha instalado um monte de lixo /opt. Eu não acho que o diretório existe mesmo em uma instalação normal do Mac OS X.

Atualizar: Graças a jtimberman para corrigir o meu echo $PATH declaração


132


origem


comentar de SMcCandlish:easiest solution when you want to make a site-wide path change (e.g. to include /usr/libexec or whatever) is to edit  /etc/paths  . While the new  /etc/paths.d/  thing is functional, it's actually more hassle than maintaining a single file. As others have hinted but not spelled out, if the path changes you want would be useful only for one user, it's best to make that change in the bash and/or tcsh config files in that user's home directory instead of system-wide. - Sathya♦
@Sathya, parece-me /etc/paths.d é útil para scripts de instalação. Se eu quiser que meu script de instalação adicione o programa instalado ao caminho, posso soltar um arquivo em /etc/paths.d. Se eu quiser editar o caminho manualmente, /etc/paths é uma opção melhor. - haydenmuhl
Eu fiz um script baseado principalmente nesta postagem, que imprime rapidamente onde o PATH é definido ao longo desses vários locais: gist.github.com/lopespm/6407349952bc8a1ff8fb - Pedro Lopes


Respostas:


Quando bash começa lê os seguintes arquivos toda vez que você faz o login. Para os propósitos do OS X, isso significa que toda vez que você abrir um novo Terminal janela.

/etc/profile
~/.bash_profile
~/.bash_login   (if .bash_profile does not exist)
~/.profile      (if .bash_login does not exist)

Quando você inicia um novo shell digitando bash na linha de comando, lê .bashrc

OS X também usa ~/.MacOSX/environment.plist para definir mais variáveis ​​de ambiente, incluindo caminhos, se necessário.

Finalmente, /etc/paths e /etc/paths.d são lidos pelo shell também.


/opt/local/bin etc. são adicionados em ~/.tcshrc por MacPorts. Também não deixe de procurar ~/.cshrc.


152



Pelo visto, ~/.MacOSX/environment.plist não funciona para algumas pessoas. Dentro Alterar o caminho para o OS X uma alternativa usando a pasta /etc/paths.d é descrito. Eu não testei isso. - Arjan
+1 para ~/.cshrc. Fui louco tentando descobrir por que ~/.profile não estava funcionando. - tomlogic
Eu acho que essa resposta está incompleta. Eu estou tentando descobrir onde um caminho errado (inexistente): / usr / bin / local, meu shell está reclamando, e não está em nenhum desses arquivos. - Tommy
eu acho que .bashrc é lido independentemente se você digitar bash ou não. - Xiao Peng - ZenUML.com


Dê uma olhada no arquivo /etc/paths, que é usado por /usr/libexec/path_helper, que é usado por /etc/profile.

Para MacPorts, use sudo /etc/paths/opt/local/bin e reabra a janela do terminal.


47





Sério, o Leopard nos deu uma nova maneira de adicionar caminho. Basta criar um arquivo contendo a parte do caminho que você deseja adicionar e colocá-lo em /etc/paths.d

Um exemplo rápido de fazer isso em uma etapa é:

echo "/some/path/to/add" >> /etc/paths.d/somefilename

Caso contrário, você pode simplesmente ir para /etc/paths.d e colocar o arquivo lá diretamente. De qualquer forma, todas as partes do caminho nos arquivos nesse diretório serão anexadas ao caminho padrão.

Isso também funciona para o caminho do usuário.

Aqui está um link para mais detalhes:

ars technica: como faço para adicionar algo ao PATH no snow leopard?

Em uma segunda nota: MacPorts coloca tudo no diretório opt precisamente porque não é usado pelas coisas da Apple. Dessa forma, não vai entrar em conflito. Seu guia (excelente escrito, BTW) tem uma explicação do porquê ele usa opt e como alterar esse padrão, se quiser.

Guia MacPorts


25



Muito legal. Agora só precisamos fazer com que esses aplicativos dependentes de caminho não poluam mais nossos arquivos de perfil ... - Daniel Beck♦
Adoro. Simples! - Andrew Hedges
comentar de SMcCandlish: I have to concur that there's nothing weird or bad about MacPorts using   /opt  (likewise Fink uses /sw); trying to replace stock Mac BSD parts with bleeding-edge builds from external projects like these is a recipe for an unusable system that requires an OS reinstallation. - Sathya♦
Linha única, sem adição de arquivos e fácil remoção. Amo isso. Obrigado leanne - Ibrahim Lawal


Para mostrar seu caminho, faça echo de $ PATH.

echo $PATH

Para definir seu caminho, edite ~/.bash_profile, não ~/.bash_login.


4





Há também o caminho determinado por ssh.

Comparar echo $PATH para ssh localhost 'echo $PATH'. Como o ssh não lê o / etc / profile, o / usr / libexec / path_helper não é executado e, portanto, o / etc / paths é ignorado. Agora tente ssh localhost 'source /etc/profile; echo $PATH'. Os caminhos devem estar mais próximos. As diferenças restantes provavelmente serão devidas à modificação do caminho em seu .bash_profile (que também é ignorado por ssh) e .bashrc (que é lido por ssh).

Se você quiser que seu caminho ssh seja semelhante ao seu caminho de terminal normal, você pode adicionar source /etc/profile para o seu .bashrc.


3



Obrigado pela dica! Eu estava procurando exatamente a solução com o ssh. svn + ssh não pôde encontrar o comando svnserve exatamente porque o caminho para o svnserve estava no .profile, mas não estava no .bashrc. - KIR


Pode ser definido em:

  • Variáveis ​​do sistema - /etc/paths
  • Variáveis ​​de usuário - veja a explicação de @Steve Folly

2





Na verdade, ele é armazenado em sua .profile arquivo em vez de .bash_login e é comum que MacPorts use isso ao invés do .bash_login Arquivo.

Também o /opt O diretório é geralmente criado pelo MacPorts e armazena seus arquivos nesta pasta.


1





A respeito de docs para /usr/libexec/path_helper utilitário, componentes iniciais para $ PATH foram retirados /etc/pathse por padrão parece

/usr/bin
/bin
/usr/sbin
/sbin
/usr/local/bin

para o OS-X Snow Leopard


1