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

139

Eu digito echo $PATHna linha de comando e recebo

/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á sendo definido, pois meu .bash_loginarquivo está vazio.

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

Atualização: Obrigado ao jtimberman por corrigir minha echo $PATHdeclaração

Andrew
fonte
5
comentar partir 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.
Sathyajith Bhat
@ Sathya, Parece-me /etc/paths.dútil para scripts de instalação. Se eu quiser que meu script de instalação inclua o programa instalado no caminho, posso inserir um arquivo /etc/paths.d. Se eu quiser editar o caminho manualmente, /etc/pathsé uma opção melhor.
haydenmuhl
Eu criei
Pedro Lopes

Respostas:

161

Quando bashinicia, ele lê os seguintes arquivos sempre que você faz login. Para os fins do OS X, isso significa sempre que você abre uma nova Terminaljanela.

/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 bashna linha de comando, ele lê.bashrc

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

Finalmente, /etc/pathse também /etc/paths.dsão lidos pelo shell.


/opt/local/binetc. são adicionados ~/.tcshrcpelo MacPorts. Também não deixe de procurar ~/.cshrc.

Steve Folly
fonte
5
Aparentemente, ~/.MacOSX/environment.plistnão funciona para algumas pessoas. Em Change Path for OS X,/etc/paths.d é descrita uma alternativa usando a pasta . Eu não testei isso.
Arjan
+1 para ~/.cshrc. Ficou louco tentando descobrir por que ~/.profilenão estava funcionando.
19411 tomlogic
Eu acho que essa resposta está incompleta. Estou tentando descobrir onde um caminho incorreto (inexistente): / usr / bin / local, meu shell está reclamando, e não está em nenhum desses arquivos.
21716 Tommy
Eu acho que .bashrcé lido, independentemente se você digita bashou não.
Xiao Peng - ZenUML.com
48

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

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

Comunidade
fonte
25

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, qualquer parte do caminho nos arquivos desse diretório será anexada ao caminho padrão.

Isso também funciona para o manpath.

Aqui está um link para mais detalhes:

ars technica: como adicionar algo ao PATH no snow leopard?

Em uma segunda nota: o MacPorts coloca tudo no diretório opt precisamente porque não é usado pelo material da Apple. Dessa forma, não entrará em conflito. Seu guia (excelentemente escrito, BTW) tem uma explicação de por que usa opt e como alterar esse padrão, se você desejar.

Guia MacPorts

leanne
fonte
Muito legal. Agora só temos de obter esses aplicativos dependentes de caminho para não poluir nossos arquivos de perfil ...
Daniel Beck
Adoro. Simples!
Andrew Hedges
comentar partir 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.
Sathyajith Bhat
Linha única, sem anexar arquivos e fácil remoção. Amo isso. Graças leanne
Ibrahim Lawal
4

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

echo $PATH

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

jtimberman
fonte
3

Há também o caminho determinado pelo ssh .

Compare echo $PATHcom ssh localhost 'echo $PATH'. Como o ssh não lê / etc / profile, o / usr / libexec / path_helper não roda e, portanto, o / etc / caminhos é ignorado. Agora tente ssh localhost 'source /etc/profile; echo $PATH'. Os caminhos devem estar mais próximos. As diferenças restantes provavelmente ocorrerão devido à modificação do caminho no seu .bash_profile (que também é ignorado pelo ssh) e .bashrc (que é lido pelo ssh).

Se você quiser que o caminho do ssh seja semelhante ao caminho normal do terminal, adicione-o source /etc/profileao .bashrc.

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

Pode ser definido em:

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

Na verdade, ele é armazenado no seu .profilearquivo em vez de .bash_logine é comum que o MacPorts o use no lugar do .bash_loginarquivo.

Além disso, o /optdiretório geralmente é criado pelo MacPorts e armazena seus arquivos nessa pasta.

ricbax
fonte
1

Em relação aos documentos para /usr/libexec/path_helperutilidade, os componentes iniciais para $ PATH foram retirados /etc/pathse, por padrão, parecem

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

para OS-X Snow Leopard

AB
fonte