Existem vários lugares onde você pode definir variáveis de ambiente.
~/.profile: use isso para variáveis que você deseja definir em todos os programas iniciados no terminal (observe que, diferentemente do Linux, todos os shells abertos no Terminal.app são shells de login).
~/.bashrc: é 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 variáveis de ambiente herdadas.
/etc/profile: isso é carregado antes de ~ / .profile, mas é equivalente. Use-a quando desejar que a variável se aplique aos programas de terminal iniciados por todos os usuários na máquina (supondo que eles usem o bash).
~/.MacOSX/environment.plist: é lido por loginwindow no login. Aplica-se a todos os aplicativos, incluindo os da GUI, exceto os lançados pelo Spotlight na 10.5 (não na 10.6). Requer que você efetue logout e logon novamente para que as alterações entrem em vigor. Este arquivo não é mais suportado no OS X 10.8.
launchdinstância do seu usuário : isso se aplica a todos os programas iniciados pelo usuário, GUI e CLI. Você pode aplicar as alterações a qualquer momento, usando o setenvcomando no launchctl. Em teoria , você deve poder inserir setenvcomandos ~/.launchd.confe launchdlê-los automaticamente quando o usuário efetuar login, mas, na prática, o suporte a esse arquivo nunca foi implementado. Em vez disso, você pode usar outro mecanismo para executar um script no logon e fazer com que esse script seja chamado launchctlpara configurar o launchdambiente.
/etc/launchd.conf: é lido pelo launchd quando o sistema é inicializado e quando um usuário efetua login. Eles afetam todos os processos do sistema, porque o launchd é o processo raiz. Para aplicar alterações ao root launchd em execução, você pode canalizar os comandos sudo launchctl.
As coisas fundamentais a entender são:
- variáveis 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 sessão do usuário.
- O launchd permite alterar suas variáveis de ambiente atuais usando
launchctl; as variáveis atualizadas são herdadas por todos os novos processos que bifurcam 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 o aplicativo GUI que usa a variável e pronto!
Para contornar o fato de que ~/.launchd.confnã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">
<plist version="1.0">
<dict>
<key>Label</key>
<string>local.launchd.conf</string>
<key>ProgramArguments</key>
<array>
<string>sh</string>
<string>-c</string>
<string>launchctl < ~/.launchd.conf</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
Então você pode colocar setenv REPLACE_WITH_VAR REPLACE_WITH_VALUEdentro ~/.launchd.conf, e ele será executado a cada login.
Observe que, ao canalizar uma lista de comandos para o launchctl dessa maneira, você não poderá definir variáveis de ambiente com valores que contenham espaços. Se você precisar fazer isso, você pode chamar launchctl da seguinte forma: launchctl setenv MYVARIABLE "QUOTE THE STRING".
Além disso, observe que outros programas executados no logon podem ser executados antes do agente de inicialização e, portanto, podem não ver as variáveis de ambiente que ele define.