web-dev-qa-db-ja.com

Mac OS Xの環境変数

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

重複しないOS Xで環境変数を設定しますか?


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


編集:

Eclipseのようなアプリだけでなく、ターミナルから変数にアクセスできるようにしたいと思います。また、これを有効にするために再起動/ログアウトする必要はありません。

180
Abdullah Jibaly

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

たとえば、.bashrcまたはどこでも設定した後、launchdで現在のパスをミラーリングする場合:

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

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

139
Matt Curtis

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

  • ~/.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によって起動されたすべてのプログラムに適用されます。 setenvlaunchctlコマンドを使用すると、いつでも変更を適用できます。 理論上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 &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の前に実行される可能性があるため、設定された環境変数が表示されない場合があります。

287
LaC

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

ここに行く:

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

12
Tom Teman

Linuxで読むことができますが、これはMac OS Xとほぼ同じです。または、BSD Unixで読むこともできます。ほとんどの場合、LinuxとBSDの違いはそれほど多くありません。

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

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

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

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

一般的に、私が唯一のユーザーであっても、システム全体の設定を混乱させないことを好みます。ローカル設定を編集することを好みます。

7
S.Lott

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

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

5
JW.

ターミナルでnano経由で~/.profileファイルを開き、そこに入力するだけです:

export PATH=whatever/you/want:$PATH

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

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

3
Migele

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

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

3
Ersin Er

MacOSで環境変数を永続的に変更する場合は、/etc/pathsで環境変数を設定します。 、このファイルはデフォルトで読み取り専用であるため、書き込み許可にはchmodが必要です。

0
IgorGanapolsky