web-dev-qa-db-ja.com

systemdでは、環境変数を〜/ .profileまたは〜/ .bashrcで宣言する必要がありますか?

environment.d を使用して~/.config/environment.d/*.confで環境変数を取得しているように思えますが、~/.bashrcまたは~/.profileまたはなど。これらの宣言をシェル固有の構文で記述できること以外に理由がない場合。

この仮定は正しいですか?環境変数(シェル固有ではない)をシェルのrcファイルまたは~/.profileに配置するために、environment.dを使用するマシンに何らかの理由がありますか?

2
Evan Carroll

これらのファイルはさまざまな目的で使用されますが、補完的な関係にあります。

  • environment.d定義 systemdユーザーサービスの変数 ;
  • .bashrc(変数を定義する場合)は、対話型の非ログインBashのインスタンスに対してそれらを定義します。
  • .profile(変数を定義する場合)は、Bash(およびその他のシェル)のインタラクティブなログインインスタンス用に変数を定義します。

したがって、.bashrc.profileで変数を設定すると、対応するシェルインスタンスで変数が設定されることが保証されます。 environment.dファイルに変数を設定すると、対応するユーザーサービスインスタンスに変数が設定されることが保証されます。これには、シェルが含まれる場合がありますが、含まれない場合があります(他の介在するレイヤーがある場合もあります。sshdを参照)。

もう1つの違いは、.bashrcまたは.profileを変更すると、その後に開始されたシェルで効果が発生することです。 environment.dの変更は、ユーザーセッションと関連サービスがリロードまたは再起動されたときにのみ有効になります。

mur がコメントで言及されているように、environment.dファイルは、シェルの初期化スクリプトよりも機能が制限されています。

2
Stephen Kitt