Mac OS Xの環境変数


186

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

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


環境変数を設定および変更するのが非常に簡単なWindowsの背景(システムプロパティ>詳細設定>環境変数に移動するだけ)から来ているため、Mac OS 10.5ではそれほど簡単ではないようです。ほとんどのリファレンスでは、/ etc / profileまたは〜/ .profileを更新する必要があると述べています。それらはシステム変数およびユーザー変数に相当しますか?たとえば、JAVA_HOME変数をどこに設定すればよいですか?


編集:

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


そして、ここでは繰り返されないリンクの質問への回答にいくつかのアドバイスがあります...
dmckee ---元モデレーターの子猫

回答:


142

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

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

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

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


1
これまでのところ最高の答えのように見え、サードパーティのアプリは必要ありません!
Abdullah Jibaly、2010

2
これはグローバルではないようです。この方法で設定された環境変数はユーザーに対してローカルです。環境変数を設定するためのグローバルなメカニズムはまだありません。
Andrew

@Andrewユーザーにとってローカルな意味ですか?その後、launchdから開始されたすべてのプロセスが影響を受けると思います。
Matt Curtis

@MattCurtis:を介して設定された環境変数launchctl setenvは、変更を行うユーザーにのみ表示されるようです。変数を通常のユーザーとして設定した場合、(sudoを介して)rootからは見えず、逆も同様です。
Andrew

2
@Andrew OK、ルートには独自のlaunchdがあります- ps aux | grep launchdこれを表示します。またman sudosudo(デフォルトで)意図的に環境をリセットするドキュメントを確認します。環境sudo -Eを保持する場合(環境で設定した変数を含むlaunchctl setenv)。ちなみに、実際のアプリケーションはありますか?もしそうなら、この方法はあなたのために機能しますか?
Matt Curtis

298

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

  • ~/.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ユーザがログイン時に自動的にそれらを読んでいましたが、このファイルのための練習のサポートで実装されませんでした。代わりに、別のメカニズムを使用してログイン時にスクリプトを実行し、そのスクリプトを呼び出しlaunchctllaunchd環境をセットアップできます。
  • /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の前に実行される可能性があるため、設定した環境変数が表示されない場合があることに注意してください。


3
実際には、について ~/.MacOSX/environment.plist、私のライオンの上にそれがされて読んで使用します。ちょうどそれをテストしました。RCenvironment設定ペインを使用して維持しているので、実際には.launchd.confよりも好みです。
ギリマンジャロ

5
取得できません~/.launchd.conf10.6.8で動作するように-どんな効果があると表示されません。また、manページには、このファイルは現在サポートされていないと記載されています。
snowcrash09

4
〜/ .launchd.confは10.7.3上で動作するようには思えないどちらかと私はmanページで見たときには、$ HOME / .launchd.confあなたのlaunchd設定ファイルと言う(現在はサポートされていない)
uncreative

4
10.8(Mountain Lion)では、〜/ .MacOSX / environment.plistはサポートされなくなりました。Apple Devによると、「。app自体のInfo.plistを変更して、必要な環境変数を含む「LSEnvironment」ディクショナリを含める必要があります」。詳細については、apple.stackexchange.com
questions /

3
@LaCすばらしい包括的な投稿。~/.launchd.confOS X 10.8.3ではまだサポートされておらず機能しないことに注意して更新してください。参照man launchd.conf
mklement0 2013年

12

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

ここに行くよ:

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


1
うわー、これはクールに見えます。まだ試していませんが、説明から私が必要としているものとまったく同じに見えます。
Abdullah Jibaly 2010

6
ところで、元のリンクは投稿してから壊れているようです(Appleの問題は何ですか?301は高価ですか?)。代わりにこのリンクを使用できます:macupdate.com/app/mac/14617/rcenvironment
Tom Teman

これは本当に古いです。OS X 10.10(Yosemite)以降でも機能する最新のソリューションについて、osx-env-syncについて言及している他の回答を確認してください。
Warren P

回答のリンクからの情報を要約してください。すでに見てきたように、リンクはさまざまな理由で切断されます。
user3.1415927

7

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

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

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

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

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

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


5

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

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


2
はい、ターミナルは、ターミナルから起動されたものと同様に、変数を継承します。RCenvironment設定ペインを使用して、変数を維持できます。
ギリマンジャロ

1
このソリューションは、Mac OS X v10.7の一部のリビジョンでは動作しません。Mac OS X v10.8以降のリビジョンには対応していません。代わりに、stackoverflow.com
LS

3

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

export PATH=whatever/you/want:$PATH

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

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


4
これは、bashコマンド環境にのみ適用されます。ここで設定する変数は、GUIアプリケーションでは表示されません。
ウォーレンP

3

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

私はまた、関連する質問への回答を掲載ここに


これは素晴らしいです。提案:launchctl unload / launctl load "refresh now"をスクリプトに入れます。私はそれをosx-env-sync-now.shと呼びました。.bash_profileを変更し、小さな「今すぐ更新」スクリプトを実行して続行します。ここにはセキュリティの影響があると思うので、いくつかの制限を行う必要があります。彼らはOS Xでこの機能をオフに理由がなければなりません
ウォーレンP

@WarrenP完了!リポジトリを確認してください。
Ersin Er

優れた。これは私にとって多くの苦痛を解決しました。これが本当に役立つ1つのケースは、SCALAを使用して開発している人です。それ以外の場合、コマンドラインscalaとGUI scala(netbeansなど)の両方にSCALA_HOMEを設定するのは大変です。
Warren P

0

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


これは私にはうまくいきません。私は/usr/bin/localそのファイル内にあり、ファイルを変更しなくても、デフォルトではその方法でしたが、私のGUIアプリにはしか表示されません/usr/bin:/bin:/usr/sbin:/sbin。何度もリブートしました。
mgol

@m_gol実行すると何が得られますcat /etc/paths/か?
IgorGanapolsky

1
/ usr / local / bin、/ usr / bin、/ bin、/ usr / sbin、/ sbin、別の行。しかし、SourceTreeは最初のものを除いてそれらすべてを認識します。
mgol

「macOSのデフォルトパスを変更する場合」に編集することもできます。これは、環境変数のより一般的な問題とは何の関係もありません。
rfay

0

2020 Mac OS X Catalinaユーザーの場合:

他の役に立たない答えは忘れてください。ここでは2つのステップだけが必要です。

  1. 命名規則:priority-appnameでファイルを作成します。次に、追加するパスをコピーして貼り付けますPATH

    たとえば、私の場合の80-vscodeコンテンツ/Applications/Visual Studio Code.app/Contents/Resources/app/bin/

  2. そのファイルをに移動します/etc/paths.d/。ターミナルで新しいタブ(新しいセッション)を開き、入力echo $PATHしてパスが追加されたことを確認することを忘れないでください!

注意:このメソッドパスをに追加するだけPATHです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.