Questão:
Como minha variável $ PATH é construída no macOS?
Jim
2012-09-17 19:49:50 UTC
view on stackexchange narkive permalink

Eu instalei recentemente o Homebrew no meu Mac e ele está reclamando que / usr / bin ocorre antes de / usr / local / bin em minha variável $ PATH , significando que programas fornecidos pelo sistema serão usados ​​em vez daqueles instalados com o Homebrew.

Meu .bashrc é configurado em um conjunto de arquivos separados, de acordo com este screencast. Isso significa que ~ / .bash_profile se parece com isto:

  if [-f ~ / .bashrc]; então fonte ~ / .bashrcfi  

~ / .bashrc se parece com isto:

  source ~ / bin / dotfiles / bashrc  

e ~ / bin / dotfiles / bashrc tem a seguinte aparência:

 . ~ / bin / dotfiles / bash / env. ~ / bin / dotfiles / bash / config. ~ / bin / dotfiles / bash / aliases  

~ / bin / dotfiles / bash / env , que é onde eu defino meu $ PATH código> variável, tem a seguinte aparência:

  export EDITOR = "kom" export PATH = algum / caminho / em / início: usr / local / bin: / Usuários / jim / pear / bin: ~ / bin: /Users/jim/.gem/ruby/1.8/bin: / Users / jim / bin / bashscripts: some / path / at / end: $ PATH  

I ' adicionamos some / path / at / start e some / path / at / end para fins de depuração, desde quando tento echo $ PATH eu obtenha isto:

/ opt / local / bin: / opt / local / sbin: / Users / jim / bin: / opt / local / bin: / opt / local / sbin: some / caminho / em / start: usr / local / bin: / Users / jim / pear / bin: / Users / jim / bin: /Users/jim/.gem/ruby/1.8/bin: / Users / jim / bin / bashscripts : algum / caminho / no / fim: / usr / bin: / bin: / usr / sbin: / sbin: / usr / local / bin

Ou seja, há uma carga de outros coisas sendo carregadas na variável $ PATH que não posso controlar na configuração que descrevi acima. Alguma ideia de onde esse material é carregado, para que eu possa alterá-lo e mover / usr / local / bin antes de / usr / bin ?

Trzy respostas:
Harald Hanche-Olsen
2012-09-17 23:58:12 UTC
view on stackexchange narkive permalink

A seção INVOCATION da página de manual do bash diz

Quando o bash é invocado como um shell de login interativo ou como um shell não interativo com a opção --login, ele primeiro lê e executa comandos do arquivo / etc / profile, se esse arquivo existir. Depois de ler esse arquivo, ele procura ~ / .bash_profile, ~ / .bash_login e ~ / .profile, nessa ordem, e lê e executa comandos do primeiro que existe e é legível.

De particular interesse é / etc / profile , que usa path_helper para construir um caminho a partir do que encontra em / etc / path e /etc/paths.d/* .

nohillside
2012-09-17 19:54:50 UTC
view on stackexchange narkive permalink

Se você corrigir o erro de digitação em sua atribuição de PATH e substituir usr / local / bin por / usr / local / bin , o Homebrew deve parar de reclamar.

As outras coisas ( / opt / local / ... ) são definitivamente adicionadas em algum lugar posteriormente durante a inicialização do shell (ou seja, após source ~ / .bashrc ou após . ~ / bin / dotfiles / bash / env ). Você terá que examinar os diferentes arquivos (ou grep para / opt / local ou PATH. * PATH ) para ver onde isso acontece (e por quê).

Obrigado patrix, isso consertou. Também encontrei http://www.semioticpixels.com/crib-notes/mac-10-7-path-settings-and-environment-variables/ que descreve como $ PATH é construído (embora no Lion)
Alex Leach
2012-09-17 23:04:18 UTC
view on stackexchange narkive permalink

Há também o bashrc em todo o sistema, que pode ser encontrado em / etc / bashrc, e alguns outros.

De man bash : -

  ARQUIVOS / bin / bash O executável bash / etc / profile O arquivo de inicialização em todo o sistema, executado para shells de login ~ / .bash_profile O arquivo de inicialização pessoal, executado para shells de login ~ / .bashrc O arquivo de inicialização individual por shell interativo ~ / .bash_logout O arquivo de limpeza de shell de login individual, executado quando um shell de login sai ~ / .inputrc Arquivo de inicialização de linha de leitura individual  


Estas perguntas e respostas foram traduzidas automaticamente do idioma inglês.O conteúdo original está disponível em stackexchange, que agradecemos pela licença cc by-sa 3.0 sob a qual é distribuído.
Loading...