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


59

正しい場所は何ですか:

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

回答:


16

私が思うに、環境変数にコミュニティのwikiページを整理に役立ちます


2
問題は、リンクされたドキュメントが混乱している、および/またはユーザー指定変数の一部が明らかに間違っていることです。シェルに依存しない方法を探しています。$ HOME / .profileがおそらく最善の方法です
...-Rmano

16
テキストを貼り付けるか、リンクされたコンテンツのスナップショットを撮ってください-将来的に利用できなくなる可能性があります!
ナムG VU 14年

4
これは理論的には質問に回答するかもしれませんが、回答の重要な部分をここに含め、参照用のリンクを提供することが望ましいでしょう
トーマスウォード

75

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は~/.profileログインシェルとして起動されるときではなく、bashを実行します。Bashはを好むでしょ~/.bash_profile~/.bash_login。[...]これらのファイルは、デフォルトではグラフィカルセッションに影響しません。」

  • ~/.bashrc -「...は変数を設定するのに最も簡単な場所かもしれません」。

1
どのプログラムが/etc/environmentいつ読むのか?使用しても、cronで動作しないようですSHELL=/bin/bash
SystemParadox

1
/ etc / environmentはPAMの一部であるように見えます。つまり、すべてのプロセスのデフォルト環境を設定する必要があります。cronは、この環境を独自の環境で上書きするという点で特別です(つまり、壊れています)。
SystemParadox

.bashrcはどのように動作しますか?bash_profileの後?.profileの代わりに?
オープン

1
@opensasおそらく別の質問として、この質問または回答を参照してください。
ベラク

@belacquaは私がする2つの以上の環境変数を追加する必要が言うことができます/etc/environment好きJAVA_HOME="/opt/java" ANT_HOME="/opt/ant" それを行う方法
Kasun Siyambalapitiya

7

あなたが持っている:

/ etc / profile:Bourneシェル(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の場合、これを理解しようとはしません。


5

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


これはまだ間違って${HOME}います。どちらも機能しません。に拡張はありません.pam_environment
確実に14

2
@detlyの拡大があり.pam_environmentますが、HOME早期に通常ことに設定されていません。その行がを読んDEFAULT=${PATH}/Applications/jdkでいた場合、PATH挿入された値が表示されていました。
ムル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.