web-dev-qa-db-ja.com

環境変数をどこで宣言しますか?

正しい場所は何ですか:

  1. グローバル環境変数はすべてのユーザーに影響を与えることを意図していますか?
  2. ユーザー固有の環境変数?
59
Ivan

環境変数に関するコミュニティWikiページ が整理に役立つと思います

16
sagarchalise

Sagarchaliseの答えに追加するために、リンクが示唆するものを設定の適切な場所として要約できます。

グローバル設定の場合、システム全体の環境変数

  • /etc/environmentを使用
  • /etc/profileまたは/etc/bash.bashrcを使用しないでください

ページから:

/etc/environment [...]は、特にシステム全体の環境変数設定用です。スクリプトファイルではなく、1行に1つずつ割り当て式で構成されています。具体的には、このファイルにはシステム全体のロケールとパス設定が保存されます。

/etc/profileの使用は非常にUnix-yの方法ですが、Ubuntuではその機能が大幅に低下します。 /etc/bash.bashrcを指し、/etc/profile.dからエントリを収集するためにのみ存在します。

私のシステムでは、profile.dの唯一の興味深いエントリエントリは/etc/profile.d/bash_completion.shです。

ローカル設定またはユーザーごとの設定の場合

Ubuntuページの以前のバージョンでは~/.pam_environmentが推奨されていましたが、現在のところ、それが機能しない場合は、

  • ~/.profile-起動プロセスのデスクトップセッション中にDisplayManagerによって自動的に実行されるのと、テキストコンソールからログインするときにログインシェルによって自動的に実行されるため、環境変数の割り当てを配置するのに最適なファイルです。

  • ~/.bash_profileまたは~./bash_login-これらのいずれかが存在する場合、bashがログインシェルとして起動されると、bashは~/.profileの代わりにそれを実行します。 Bashは~/.bash_profileより~/.bash_loginを優先します。 [...]これらのファイルは、デフォルトではグラフィカルセッションに影響しません。」

  • ~/.bashrc-"...変数を設定する最も簡単な場所かもしれません"。
75
belacqua

あなたが持っている:

/ etc/profile:Bourne Shell(sh(1))およびBourne互換シェル(bash(1)、ksh(1)、ash(1)、...)のシステム全体の.profileファイル。

lucidとMaverickで実行される

/etc/profile.d/*.sh

存在し、ユーザーのシェルがbashの場合:

/etc/bash.bashrc

ユーザー環境では、シェルに固有の紛らわしい配列があり、それが「ログインシェル」と見なされるかどうかがあります。シェルがbashの場合:

   ~/.bash_profile
          The personal initialization file, executed for login shells
   ~/.bashrc
          The individual per-interactive-Shell startup file

sh /ダッシュの場合:

$HOME/.profile

zshの場合、 これを理解するため を試みることすらありません。

7
msw

https://help.ubuntu.com/community/EnvironmentVariables で推奨されているとおり:

  1. すべてのユーザーに影響を与えることを目的としたグローバル環境変数は、/etc/environmentに入れる必要があります。

  2. ユーザー固有の環境変数は、~/.pam_environmentで設定する必要があります。

Ubuntuで環境変数を設定するためのプロファイルおよびrcファイルを避けてください。彼らは私が価値があるよりも多くの頭痛を引き起こしました。

ただし、これは行われるよりも簡単です;)

私と同じ設定のギャップが発生する可能性があります。以下の暗号化されたホームの回避策を参照してください。

私の~/.pam_environment

PATH            DEFAULT=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:${HOME}/bin
IDEA_JDK        DEFAULT=${HOME}/Applications/jdk

なぜい静的パスなのか? ${PATH}は機能しません。私はそれを回避しようとして数回ログインをブロックしましたので、デフォルトのい静的コピーに固執しています:)

暗号化されたホームフォルダーの回避策

Precise 12.04 Beta 2までのUbuntuリリースでは、暗号化されたホームディレクトリを使用している場合、/etc/pam.d/common-sessionを変更して~/.pam_environmentをロードする必要があります。このソリューションは以前のリリースで動作するようですが、私はテストしていません。

Guenther Montag(g-montag)が2010-08-19に書いた:

これは、暗号化されたホームディレクトリの問題のようです。追加した

セッションが必要pam_env.so

/etc/pam.d/common-sessionの最後で、〜/ .pam_environmentが読み取られます。ホームディレクトリが暗号化されていない別のシステム(また10.04)では、回避策は不要です。おそらく私の場合、システムは復号化される前に〜/ .pam_environmentを読み取ろうとします。

スーパーユーザーに関する私の回答から修正: https://superuser.com/a/408373/66856

5
Alain O'Dea