回答:
これらの構成ファイルは、グローバル(/etc/environment
、/etc/profile
)またはユーザー固有(~/.profile
、~/.bashrc
)に関係なく、次のログイン/セッションでのみ処理されます。
グローバルなファイルは、すべてのユーザー(だけでなく、根)に適用されます...しかし、あなたは、環境に反映された変更を確認するためにログインセッションを再起動する必要があります。これは、su
観察したとおりに呼び出すか、ログアウト/ログインまたは再起動することで発生します。あなたは可能性su
、root以外のユーザーに、あなたは、彼らはまた、環境の変化を持って見ること。
グローバル環境を取得するために再起動または再度ログインする必要がある理由は、環境が親プロセスから継承され、実行する他のすべてのルートプロセスがログインシェルであるためです...ログインシェルにない場合環境...その後、ログインシェル内でプロセスが開始されません。もちろん、個々のプロセスの起動時に環境を設定/更新できますが、変更を確認するには、ログインシェルの環境を設定し、すべてのサブプロセスを再起動する必要があります。
言及した他の誰かとして、あなたはへの変更のため、再起動またはログアウト/ログインを必要とし/etc/profile
、/etc/profile.d/*.sh
かつ/etc/environment
ピックアップされます。
これは、これらのファイルはグローバル環境を指定しますが、ログイン時に一度だけ実行されるため、既存のログイン/セッションにはこれらのファイルへの変更が反映されないためです。再起動すると、全員のログインが「リセット」され、新しい環境が強制的に取得されます。
独自のログインセッションではsource /etc/profile
、再起動やログアウト/ログインなしで変更を取得できますが、それは自分のセッションとセッション内で実行されている新しいプロセスにのみ影響します。
注には変数展開がないことも/etc/environment
(それはスクリプトではありません)あなたのようなものを行うことはできませんので、PATH="$PATH:/my/custom/path"
そこに。
注意また、その/etc/profile
と/etc/profile.d/*.sh
(あなたがデーモンプロセスのためにそのログインシェル外実行環境変数を設定しようとしている場合はIE)を唯一のログインセッションのために実行され、環境が設定されて、システムの非ログインアカウントに利用可能ではありません。
注bashrc
全体のログインシェルのためではなく、bashのシェルとサブプロセスの環境を設定するために有用ではありません...ので、真の「グローバル」または「ユーザーグローバル」のためにあなたは、おそらく中にご使用の環境の設定を置きたいと思う/etc/profile
か/etc/profile.d/my-custom-env.sh
または~/.profile
。他のシェル(zshなど)には独自の設定ファイルもあるため、bashrcの非bash固有の環境設定は、シェルを切り替える(または、システム上の他のユーザーに別のシェルを使用させる)場合に問題または混乱を引き起こします。
新しいプログラムをインストールし、それを適切に実行するために何らかの環境を指定する必要があることはよくある問題です。グローバル環境は一つの答えですが、多くの場合、サーバーや自動プロビジョニング/ユースケースの構成には理想的ではない再起動が必要になります。これが本当にシステム上のすべてのユーザーとプログラムが必要とする変数なのか、それとも特定のユーザーまたはプログラムが利用できるようにする必要があるだけなのかを自問する必要があります。
~/.profile
~/.bashrc
対話型、ログインシェル、bash専用などでこれを使用するかどうかに応じて、ユーザーのホームディレクトリのプロファイルまたはbashrcに環境を含めることを検討します(例)。
ユーザーのログインセッション内のすべてのプロセスで環境の変更を使用できるようにするには、再起動またはログアウト/ログインも必要になることに注意してください。ユーザーはsource ~/.profile
...しかし、それは端末内で行われ、その端末セッションと子プロセス内の環境のみを更新します...必ずしもユーザーのログイン環境全体に対してではありません。
1つは、コマンドの実行時に環境を提供することです。
VAR_NAME="VAR VALUE" VAR2_NAME="VAR2_VALUE" /path/to/program --opt1 --op2
あなたはまた、下ユニット/サービス・ファイル内の環境を指定することができますsystemdに使用している場合[Service]
でEnvironment=VAR_NAME="VAR VALUE" VAR2_NAME="VAR2_VALUE
プログラムを実行するたびに環境を指定する必要があるため、このオプションは不格好に感じるかもしれませんが、環境が本当にそのプログラムでのみ必要な場合...これは本当に最善の方法であり、すべてにダンプするのではなく、それに慣れる必要がありますbashrcまたはプロファイルファイルに。
systemdまたはinitを使用して環境をセットアップしてプログラムを実行しない場合は、もちろん、プログラムの実行をbashスクリプトでラップして、環境セットアップを含む完全なコマンドを便利に保存することもできます。
ここに非常に詳細な回答もありますので、お読みください:https : //askubuntu.com/a/247769/824160