質問

更新:以下のリンクには、完全な回答がありません 。パスまたは変数を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によって読み取られます。これは、Spotlightによって10.5(10.6ではない)で起動されたものを除く、GUIアプリケーションを含むすべてのアプリケーションに適用されます。変更を有効にするには、ログアウトして再度ログインする必要があります。このファイルは、OS X 10.8以降サポートされなくなりました。
  • ユーザーの launchd インスタンス:これは、ユーザー、GUI、およびCLIによって起動されたすべてのプログラムに適用されます。 launchctl setenv コマンドを使用して、いつでも変更を適用できます。 理論上〜/ .launchd.conf setenv コマンドを入れることができ、 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>

その後、〜/ .launchd.conf 内に setenv REPLACE_WITH_VAR REPLACE_WITH_VALUE を配置すると、ログインするたびに実行されます。

この方法でコマンドリストをlaunchctlにパイプする場合、スペースを含む値で環境変数を設定できないことに注意してください。そのようにする必要がある場合は、次のようにlaunchctlを呼び出すことができます。 launchctl setenv MYVARIABLE&QUOTE THE STRING&quot;

また、ログイン時に実行される他のプログラムは、launchagentの前に実行される可能性があるため、設定された環境変数が表示されない場合があります。

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

ここに行く:

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

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

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

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

&quot; JAVA_HOME変数はどこに設定すればよいですか?&quot;

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

一般に、私は唯一のユーザーですが、システム全体の設定を台無しにしないことを好みます。ローカル設定を編集したい。

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

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

ターミナルで nano を使用して〜/ .profile ファイルを開き、そこに入力します。

export PATH=whatever/you/want:$PATH

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

&quot;:$ PATH&quot;の追加を忘れないでくださいwhat / you / wantの後、それ以外の場合は、PATH変数内のすべてのパスを消去します。

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top