Variáveis ​​de ambiente no Mac OS X

Atualização: O link abaixo não possui uma resposta completa . Ter que definir o caminho ou a variável em dois locais (um para a GUI e outro para o shell) é ruim.

Não Duplicado de : Configurando Variáveis ​​de Ambiente no OS X?


Vindo de um plano de fundo do Windows onde é muito fácil definir e modificar variables ​​de ambiente (basta acessar Propriedades do Sistema> Avançado> Variáveis ​​de Ambiente), ele não parece ser tão direto no Mac OS 10.5. A maioria das referências diz que eu devo atualizar o / etc / profile ou ~ / .profile. Esses são equivalentes a variables ​​de sistema e variables ​​de usuário? Por exemplo, onde devo definir minha variável JAVA_HOME ?


EDITAR:

Eu quero ser capaz de acessar a variável do terminal, bem como um aplicativo como o Eclipse. Além disso, espero não ter que reiniciar / efetuar logout para que isso tenha efeito.

Não há necessidade de duplicação. Você pode definir variables ​​de ambiente usadas pelo launchd (e processos filhos, isto é, qualquer coisa que você iniciar a partir do Spotlight) usando launchctl setenv .

Por exemplo, se você quiser espelhar seu caminho atual no launchd depois de configurá-lo no .bashrc ou em qualquer lugar:

 PATH=whatever:you:want launchctl setenv PATH $PATH 

As variables ​​de ambiente não são atualizadas automaticamente nos aplicativos em execução. Você precisará reiniciar os aplicativos para obter as variables ​​de ambiente atualizadas (embora você possa apenas definir variables ​​em seu shell, por exemplo, PATH=whatever:you:want ; não há necessidade de reiniciar o terminal).

Existem vários locais onde você pode definir variables ​​de ambiente.

  • ~/.profile : use isso para variables ​​que você deseja definir em todos os programas iniciados a partir do terminal (observe que, ao contrário do Linux, todos os shells abertos no Terminal.app são shells de login).
  • ~/.bashrc : isto é invocado para shells que não são shells de login. Use isso para aliases e outras coisas que precisam ser redefinidas em subshells, não para variables ​​de ambiente que são herdadas.
  • /etc/profile : este é carregado antes de ~ / .profile, mas é de outra forma equivalente. Use-o quando quiser que a variável se aplique a programas de terminal iniciados por todos os usuários na máquina (supondo que eles usem o bash).
  • ~/.MacOSX/environment.plist : isso é lido por loginwindow no login. Ele se aplica a todos os aplicativos, incluindo os GUI, exceto aqueles lançados pelo Spotlight em 10.5 (não 10.6). Requer que você efetue logout e login novamente para que as alterações entrem em vigor. Este arquivo não é mais suportado como no OS X 10.8.
  • instância launchd do seu usuário: isso se aplica a todos os programas iniciados pelo usuário, GUI e CLI. Você pode aplicar alterações a qualquer momento usando o comando setenv em launchctl . Teoricamente , você deve ser capaz de colocar os comandos setenv em ~/.launchd.conf , e launchd os lerá automaticamente quando o usuário fizer o login, mas na prática o suporte para este arquivo nunca foi implementado. Em vez disso, você pode usar outro mecanismo para executar um script no login e fazer com que o script chame launchctl para configurar o ambiente launchd .
  • /etc/launchd.conf : isso é lido pelo launchd quando o sistema é iniciado e quando um usuário efetua login. Eles afetam cada processo no sistema, porque o launchd é o processo raiz. Para aplicar mudanças na execução do root launchd, você pode enviar os comandos para o comando sudo launchctl .

As coisas fundamentais para entender são:

  • variables ​​de ambiente são herdadas pelos filhos de um processo no momento em que são bifurcadas.
  • o processo raiz é uma instância launchd e também há uma instância launchd separada por session do usuário.
  • O launchd permite que você altere suas variables ​​de ambiente atuais usando launchctl ; as variables ​​atualizadas são então herdadas por todos os novos processos que ele cria a partir de então.

Exemplo de configuração de uma variável de ambiente com o launchd:

 echo setenv REPLACE_WITH_VAR REPLACE_WITH_VALUE | launchctl 

Agora, inicie seu aplicativo GUI que usa a variável e voila!

Para contornar o fato de que ~/.launchd.conf não funciona, você pode colocar o seguinte script em ~/Library/LaunchAgents/local.launchd.conf.plist :

 < ?xml version="1.0" encoding="UTF-8"?> < !DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">   Label local.launchd.conf ProgramArguments  sh -c launchctl < ~/.launchd.conf  RunAtLoad    

Então você pode colocar setenv REPLACE_WITH_VAR REPLACE_WITH_VALUE dentro de ~/.launchd.conf , e ele será executado a cada login.

Observe que, ao direcionar uma lista de comandos para launchctl dessa maneira, você não poderá definir variables ​​de ambiente com valores que contenham espaços. Se você precisar fazer isso, você pode chamar launchctl da seguinte maneira: launchctl setenv MYVARIABLE "QUOTE THE STRING" .

Além disso, observe que outros programas executados no login podem ser executados antes do launchagent e, portanto, podem não ver as variables ​​de ambiente que ele configura.

Acho que o que o OP está procurando é uma solução simples, semelhante ao Windows.

aqui vai você:

https://www.macupdate.com/app/mac/14617/rcenvironment

Você pode ler no linux, que é bem parecido com o que o Mac OS X é. Ou você pode ler no BSD Unix, que é um pouco mais próximo. Na maioria das vezes, as diferenças entre o Linux e o BSD não são muito.

/etc/profile são variables ​​de ambiente do sistema.

~/.profile são variables ​​de ambiente específicas do usuário.

“onde devo definir minha variável JAVA_HOME?”

  • Você tem vários usuários? Eles se importam? Você mexeria com outro usuário alterando um /etc/profile ?

Geralmente, prefiro não mexer nas configurações do sistema, mesmo sendo o único usuário. Eu prefiro editar minhas configurações locais.

Para aplicativos GUI, você terá que criar e editar ~/.MacOSX/environment.plist . Mais detalhes aqui . Você precisará efetuar logout para que estes entrem em vigor. Eu não tenho certeza se eles também afetam os aplicativos iniciados pelo Terminal, mas eu suponho que eles iriam.

Para aplicativos iniciados no Terminal, você também pode editar o arquivo ~ / .profile.

Apenas abra o ~/.profile , através do nano no Terminal e digite lá:

 export PATH=whatever/you/want:$PATH 

Salve este arquivo (cmd + X e Y). Depois disso, faça o logout / login novamente ou apenas abra uma nova aba no Terminal e tente usar sua nova variável.

POR FAVOR, não esqueça de adicionar “: $ PATH” depois do que você quiser, caso contrário, você apagará todos os caminhos na variável PATH, que estavam lá antes disso.

Sincronize as variables ​​de ambiente do OS X para aplicativos de linha de comando e GUI de uma única fonte com osx-env-sync .

Eu também postei uma resposta para uma questão relacionada aqui .

Se você quiser alterar as variables ​​de ambiente permanentemente no El Capitan, configure-as em /etc/paths . Note , este arquivo é somente leitura por padrão, então você terá que chmod para permissions de gravação.