environment.d
を使用して~/.config/environment.d/*.conf
で環境変数を取得しているように思えますが、~/.bashrc
または~/.profile
またはなど。これらの宣言をシェル固有の構文で記述できること以外に理由がない場合。
この仮定は正しいですか?環境変数(シェル固有ではない)をシェルのrc
ファイルまたは~/.profile
に配置するために、environment.dを使用するマシンに何らかの理由がありますか?
これらのファイルはさまざまな目的で使用されますが、補完的な関係にあります。
environment.d
定義 systemdユーザーサービスの変数 ;.bashrc
(変数を定義する場合)は、対話型の非ログインBashのインスタンスに対してそれらを定義します。.profile
(変数を定義する場合)は、Bash(およびその他のシェル)のインタラクティブなログインインスタンス用に変数を定義します。したがって、.bashrc
や.profile
で変数を設定すると、対応するシェルインスタンスで変数が設定されることが保証されます。 environment.d
ファイルに変数を設定すると、対応するユーザーサービスインスタンスに変数が設定されることが保証されます。これには、シェルが含まれる場合がありますが、含まれない場合があります(他の介在するレイヤーがある場合もあります。sshd
を参照)。
もう1つの違いは、.bashrc
または.profile
を変更すると、その後に開始されたシェルで効果が発生することです。 environment.d
の変更は、ユーザーセッションと関連サービスがリロードまたは再起動されたときにのみ有効になります。
mur がコメントで言及されているように、environment.d
ファイルは、シェルの初期化スクリプトよりも機能が制限されています。