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.
launchd
instâ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 setenv
comando no launchctl
. Em teoria , você deve poder inserir setenv
comandos ~/.launchd.conf
e launchd
lê-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 launchctl
para configurar o launchd
ambiente.
/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.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">
<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_VALUE
dentro ~/.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.