いつ.bashrcを使用し、いつ.profileを使用する必要がありますか? [コピー]

いつ.bashrcを使用し、いつ.profileを使用する必要がありますか? [コピー]

私はデフォルトですべての設定を.bashrcに入れ、zshを使用するとすべての設定を.zshrcに入れます。

Rustインストーラが.profileを修正して、私のPATHに新しいインストールを追加したという通知を送信しました。

いつ何が起こるべきですか~/.profile

これは私がどのシェルを使用しているのかわからないので、またはすべての一般設定が.profileにあるべきですか?

答え1

.profileすべてのログインシェルから読み込み、.xxxrcすべての対話型シェルから読み込みます.profile

追加する内容に応じて決定する必要があります。

良いアイデアは、エクスポートされた環境変数を設定して、サブシェルに伝播されるすべてのエントリを.profileに入れることです。

伝播されないものは、.bashrcまたはシェルが探しているすべてのものになければなりません。たとえば、エイリアスと関数定義があります。

答え2

Bash には、実行するスクリプトと時期に関するかなり複雑なロジックがあります。

ただし、主に次のように要約されます。

  • あなたの設定親プロセスから子プロセスに継承(環境変数、s)は通常、ulimitログインごとに一度だけ設定する必要があります。.profile.bashrc
  • 両方の設定がある場合遺伝学そして添加物PATH(たとえば、And wastefulなどの構文を使用する既存の値に何かをPATH=$PATH:/some/directory追加することです。たとえば、に設定するとデフォルトのシェルでうまく機能しますが、エディタを起動してシェルエスケープ機能を使用するとPATHに同様の値があることがわかります。各サブシェルは通常ディレクトリをPATHに追加します。.bashrcPATH=$PATH:/some/directory.bashrc...:/some/directory:/some/directory.profile
  • あなたの設定遺伝しないシェルエイリアスや関数などの一般的なプロセス間では、それを定義する必要があります.bashrc。で定義すると、.profileさまざまなアプリケーションでシェルエスケープ機能を使用して実行されたシェルでは使用できないことがわかります。 (また、ディストリビューションの標準またはデフォルト値がすでにこの機能を提供していない限り、セッションのデフォルトのログインシェルもこれらの定義を取得するためにソースを取得するためにコマンドの.bashrc最後にコマンドを追加する必要があるかもしれません。).profile/etc/profile.profile

グラフィカルユーザーインターフェイスを使用すると、別のレベルの複雑さが追加されます。 GUIセッションは通常、.profileログイン時またはそれに対応するセッションを取得するため(セッション開始スクリプトがログインシェルとして実行されるため)、すべての継承可能な設定は通常デスクトップ環境から継承され、継承可能なすべての設定もデスクトップ環境に継承されます。になります。デスクトップアイコンまたはメニューを使用して実行されるアプリケーション。

X11 GUIセッションのすべての端末ウィンドウは、次の2つの方法のいずれかに設定できます。

  • 完全に独立したターミナルセッション:各ターミナルウィンドウは独立したログインセッションとして扱われ、環境はターミナルエミュレータのインプロセスシェルのいくつかのデフォルトシステム全体のデフォルトに基づいて構築されます。この場合、各新しいターミナルウィンドウはログインシェルとして実行されるため、.profile開いたときに同等の操作が実行されます。
  • 各端末ウィンドウは、基本 GUI ログインセッションの一部とみなされます。この場合、ターミナルウィンドウ内のシェルは非ログインシェルで始まり、実行されるか、.bashrcそれに対応するシェルのみが実行されます。継承可能な設定は、デスクトップ環境/ウィンドウマネージャプロセスを介してデフォルトのGUIログインセッションから継承されます。

関連情報