環境変数を設定できる場所がいくつかあります。
~/.profile
:ターミナルから起動するすべてのプログラムで設定する変数にこれを使用します(Linuxとは異なり、Terminal.appで開かれるすべてのシェルはログインシェルです)。
~/.bashrc
:これは、ログインシェルではないシェルに対して呼び出されます。これは、継承される環境変数ではなく、サブシェルで再定義する必要があるエイリアスやその他のものに使用します。
/etc/profile
:これは〜/ .profileの前にロードされますが、それ以外は同等です。マシン上のすべてのユーザーが起動したターミナルプログラムに変数を適用する場合に使用します(ユーザーがbashを使用している場合)。
~/.MacOSX/environment.plist
:ログイン時にloginwindowによって読み取られます。これは、Spotlightによって10.5で起動されたアプリケーション(10.6ではない)を除く、GUIアプリケーションを含むすべてのアプリケーションに適用されます。変更を有効にするには、ログアウトして再度ログインする必要があります。このファイルはOS X 10.8でサポートされなくなりました。
- ユーザーの
launchd
インスタンス:これは、ユーザー、GUI、CLIによって起動されたすべてのプログラムに適用されます。のsetenv
コマンドを使用して、いつでも変更を適用できますlaunchctl
。理論的には、あなたが置くことができるはずsetenv
のコマンドを~/.launchd.conf
、そしてlaunchd
ユーザがログイン時に自動的にそれらを読んでいましたが、このファイルのための練習のサポートで実装されませんでした。代わりに、別のメカニズムを使用してログイン時にスクリプトを実行し、そのスクリプトを呼び出しlaunchctl
てlaunchd
環境をセットアップできます。
/etc/launchd.conf
:これは、システムの起動時とユーザーのログイン時に、launchdによって読み取られます。launchdはルートプロセスであるため、システム上のすべてのプロセスに影響します。実行中のルートlaunchdに変更を適用するには、コマンドをにパイプしますsudo launchctl
。
理解すべき基本的なことは次のとおりです。
- 環境変数は、フォークされたときにプロセスの子によって継承されます。
- ルートプロセスはlaunchdインスタンスであり、ユーザーセッションごとに個別のlaunchdインスタンスもあります。
- launchdでは、を使用して現在の環境変数を変更できます
launchctl
。その後、更新された変数は、それ以降に分岐するすべての新しいプロセスに継承されます。
launchdで環境変数を設定する例:
echo setenv REPLACE_WITH_VAR REPLACE_WITH_VALUE | launchctl
次に、変数を使用するGUIアプリを起動します。
~/.launchd.conf
機能しないという事実を回避するには、次のスクリプトをに入れます~/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>
その後、setenv REPLACE_WITH_VAR REPLACE_WITH_VALUE
内部~/.launchd.conf
に置くことができ、ログインごとに実行されます。
この方法でコマンドリストをlaunchctlにパイプすると、スペースを含む値で環境変数を設定できないことに注意してください。そうする必要がある場合は、次のようにlaunchctlを呼び出すことができますlaunchctl setenv MYVARIABLE "QUOTE THE STRING"
。
また、ログイン時に実行される他のプログラムは、launchagentの前に実行される可能性があるため、設定した環境変数が表示されない場合があることに注意してください。