更新:下のリンクには完全な回答がありません。パスまたは変数を2か所(GUI用とシェル用)に設定する必要があるのは不十分です。
重複しない: OS Xで環境変数を設定しますか?
環境変数の設定と変更が非常に簡単なWindowsのバックグラウンド(システムプロパティ>詳細設定>環境変数に移動するだけ)から来ると、Mac OS 10.5ではそれほど単純ではないようです。ほとんどの参照では、/ etc/profileまたは〜/ .profileを更新する必要があると書かれています。それらはシステム変数とユーザー変数に相当しますか?たとえば、Java_HOME
変数をどこに設定すればよいですか?
編集:
Eclipseのようなアプリだけでなく、ターミナルから変数にアクセスできるようにしたいと思います。また、これを有効にするために再起動/ログアウトする必要はありません。
複製する必要はありません。 launchctl setenv
を使用して、launchd(および子プロセス、つまりSpotlightから起動するもの)が使用する環境変数を設定できます。
たとえば、.bashrc
またはどこでも設定した後、launchdで現在のパスをミラーリングする場合:
PATH=whatever:you:want
launchctl setenv PATH $PATH
環境変数は、実行中のアプリケーションでは自動的に更新されません。更新された環境変数を取得するには、アプリケーションを再起動する必要があります(たとえば、PATH=whatever:you:want
などのシェルで変数を設定するだけで、端末を再起動する必要はありません)。
環境変数を設定できる場所はいくつかあります。
~/.profile
:これは、ターミナルから起動されるすべてのプログラムで設定する変数に使用します(Linuxとは異なり、Terminal.appで開かれるシェルはすべてログインシェルであることに注意してください)。~/.bashrc
:これは、ログインシェルではないシェルに対して呼び出されます。これは、継承される環境変数ではなく、サブシェルで再定義する必要があるエイリアスやその他のものに使用します。/etc/profile
:これは〜/ .profileの前にロードされますが、それ以外は同等です。マシン上のすべてのユーザーが起動したターミナルプログラムに変数を適用する場合に使用します(bashを使用すると仮定)。~/.MacOSX/environment.plist
:これは、ログイン時にloginwindowによって読み取られます。これは、10.5(10.6ではなく)にSpotlightによって起動されたものを除く、GUIアプリケーションを含むすべてのアプリケーションに適用されます。変更を有効にするには、ログアウトして再度ログインする必要があります。このファイルは、OS X 10.8以降ではサポートされなくなりました。launchd
インスタンス:これは、ユーザー、GUI、およびCLIによって起動されたすべてのプログラムに適用されます。 setenv
でlaunchctl
コマンドを使用すると、いつでも変更を適用できます。 理論上、setenv
コマンドを~/.launchd.conf
に入れることができ、ユーザーがログインするとlaunchd
が自動的にそれらを読み取りますが、実際にはこのファイルのサポートは実装されていません。代わりに、別のメカニズムを使用してログイン時にスクリプトを実行し、そのスクリプトでlaunchctl
を呼び出してlaunchd
環境をセットアップできます。/etc/launchd.conf
:これは、システムの起動時およびユーザーのログイン時にlaunchdによって読み取られます。launchdはルートプロセスであるため、システム上のすべての単一プロセスに影響します。実行中のルートlaunchdに変更を適用するには、コマンドをSudo launchctl
にパイプします。理解すべき基本的なことは次のとおりです。
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の前に実行される可能性があるため、設定された環境変数が表示されない場合があります。
Linuxで読むことができますが、これはMac OS Xとほぼ同じです。または、BSD Unixで読むこともできます。ほとんどの場合、LinuxとBSDの違いはそれほど多くありません。
/etc/profile
はシステム環境変数です。
~/.profile
はユーザー固有の環境変数です。
「Java_HOME変数はどこに設定すればよいですか?」
/etc/profile
を変更して他のユーザーを台無しにしますか?一般的に、私が唯一のユーザーであっても、システム全体の設定を混乱させないことを好みます。ローカル設定を編集することを好みます。
GUIアプリの場合は、~/.MacOSX/environment.plist
を作成および編集する必要があります。詳細 こちら 。これらを有効にするには、ログアウトする必要があります。ターミナルから起動されたアプリケーションにも影響するかどうかはわかりませんが、影響があると思います。
ターミナルから起動したアプリの場合、〜/ .profileファイルを編集することもできます。
ターミナルでnano
経由で~/.profile
ファイルを開き、そこに入力するだけです:
export PATH=whatever/you/want:$PATH
このファイルを保存します(cmd + XおよびY)。その後、再度ログアウト/ログインするか、ターミナルで新しいタブを開いて新しい変数を使用してみてください。
What/you/wantの後に ":$ PATH"を追加することを忘れないでください。そうしないと、その前にあったPATH変数内のすべてのパスが消去されます。
osx-env-syncを使用して、単一ソースからのコマンドラインおよびGUIアプリケーションのOS X環境変数を同期します。
関連する質問への回答も投稿しました here 。
MacOSで環境変数を永続的に変更する場合は、/etc/paths
で環境変数を設定します。 注、このファイルはデフォルトで読み取り専用であるため、書き込み許可にはchmodが必要です。