200

更新: 以下のリンクには完全な回答がありません。パスまたは変数を 2 つの場所 (GUI 用とシェル用) に設定する必要があるのは面倒です。

の重複ではありません: OS X で環境変数を設定しますか?


環境変数の設定と変更が非常に簡単な Windows のバックグラウンド ([システム プロパティ] > [詳細設定] > [環境変数] に移動するだけ) から来ると、Mac OS 10.5 ではそれほど単純ではないようです。ほとんどのリファレンスは、/etc/profile または ~/.profile を更新する必要があると言っています。それらはシステム変数とユーザー変数に相当しますか? たとえば、JAVA_HOME変数をどこに設定すればよいですか?


編集:

Eclipse のようなアプリだけでなく、ターミナルからも変数にアクセスできるようにしたいと考えています。また、これを有効にするために再起動/ログアウトする必要がないことを願っています。

4

10 に答える 10

312

環境変数を設定できる場所がいくつかあります。

  • ~/.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.conflaunchdlaunchctllaunchd
  • /etc/launchd.conf: これは、システムの起動時およびユーザーのログイン時に launchd によって読み取られます。launchd はルート プロセスであるため、システム上のすべてのプロセスに影響します。実行中の root 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 &lt; ~/.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 の前に実行される可能性があるため、設定された環境変数が表示されない場合があることに注意してください。

于 2010-12-31T00:33:07.510 に答える
153

複製する必要はありません。を使用して、launchd(および子プロセス、つまりSpotlightから開始するもの)で使用される環境変数を設定できますlaunchctl setenv

たとえば、launchdで現在のパスをミラーリングする場合は、次の.bashrc場所で設定した後、次のようにします。

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

実行中のアプリケーションでは、環境変数は自動的に更新されません。更新された環境変数を取得するには、アプリケーションを再起動する必要があります(ただし、シェルで変数を設定するだけで済みます。たとえばPATH=whatever:you:want、ターミナルを再起動する必要はありません)。

于 2010-09-21T01:20:54.273 に答える
12

OPが探しているのは、シンプルでWindowsのようなソリューションだと思います。

どうぞ:

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

于 2010-12-02T14:23:53.867 に答える
8

Mac OS Xにかなり近いLinuxで読むことができます。または、もう少し近い BSD Unix を読むこともできます。ほとんどの場合、Linux と BSD の違いはそれほど大きくありません。

/etc/profileシステム環境変数です。

~/.profileユーザー固有の環境変数です。

「JAVA_HOME 変数はどこに設定すればよいですか?」

  • 複数のユーザーがいますか? 彼らは気にしますか?を変更して他のユーザーを台無しにし/etc/profileますか?

一般的に、私は唯一のユーザーであっても、システム全体の設定をいじりたくありません。ローカル設定を編集することを好みます。

于 2009-03-02T20:13:52.647 に答える
5

GUI アプリの場合は、 を作成して編集する必要があります~/.MacOSX/environment.plist。詳細はこちら。これらを有効にするには、ログアウトする必要があります。ターミナルから起動されたアプリケーションにも影響があるかどうかはわかりませんが、影響があると思います。

ターミナルから起動したアプリの場合、~/.profile ファイルも編集できます。

于 2009-03-02T20:10:36.833 に答える
4

osx-env-syncを使用して、コマンドラインおよび GUI アプリケーションの OS X 環境変数を単一のソースから同期します。

関連する質問への回答もここに投稿しました。

于 2015-09-04T21:10:14.813 に答える
3

ターミナルで~/.profileファイルを開き、そこに次のように入力します。nano

export PATH=whatever/you/want:$PATH

このファイルを保存します (cmd+X および Y)。その後、ログアウト/ログインし直すか、ターミナルで新しいタブを開いて、新しい変数を使用してみてください。

":$PATH" を追加することを忘れないでください。そうしないと、その前にあった PATH 変数のすべてのパスが消去されます。

于 2012-04-12T09:03:43.187 に答える