.bashrcが.bash_profileに役立つ状況はありますか?

.bashrcが.bash_profileに役立つ状況はありますか?

.bashrc私はand .bash_profile(またはその問題について).bash_loginの違いを理解していますが、bashシェル設定を~/.profile選択する特別な理由はありますか?.bashrc.bash_profile

.bashrc私が理解したのは、新しいbashウィンドウが開くたびに、端末の色、環境変数などの設定が再ロードされます。.bash_profileログイン時に一度だけロードされ、これほど十分だと思います。それで、なぜ.bashrcそこに何も入れますか?

私が考えることができる唯一の理由は、構成をロードするためにシステムからログアウトする必要がないことです。

純粋に伝統的な理由以外は答えを見つけることができません。

答え1

シェルオプション(shoptまたはset)は環境を通して継承されません。どちらもありませんニックネーム。たとえば、すべてのシェルを有効にするには、failglobRCファイルに含める必要があります。エイリアスをエクスポートした関数に置き換えることができますが、これらのオプションの回避策はありません。

道路伝統的で、マニュアルに.bash_profileソースを持つことをお勧めします。.bashrcしたがって、ここで入力した設定はログインシェルと非論理シェルの両方にロードされます。のみ存在する場合は、.bash_profile実際に使用しているシェルにロードされない可能性があります。

別のケースは、実際の実行コード(たとえば、いくつかの高度なコード)で構成がより複雑であることです。PROMPT_COMMAND)すべてのシェルで新しく初期化された変数を使用しようとしています。これらの変数はまったくエクスポートされないかもしれませんし、配列ですがエクスポートできない変数かもしれません。

最後のケースはコマンド実行の副作用です。fortuneタスクのリストが各新しいシェルに表示されます。これはシェルの動作を設定するのと同じくらい「構成」ではありません。


ログインシェルとして呼び出されないより一般的なケースもありますbash(セッションマネージャが他の操作を実行したり、ログインシェルではないため...)。.bash_profileまったく処理されません。しかし、これはあなたが心配する以上のものかもしれません。

答え2

定義した関数またはエイリアスは、ファイルでのみ定義した場合はサブシェルでは使用できませんprofile

このsourceコマンドを使用すると、ログアウトせずにファイルを再ロードできますが、パスが変更された場合、パスがわずかに破損する可能性があります。.エイリアス自体ですがsource、時にはシステム管理者が再マッピングすることもあります(理由はわかりません)。

これは、実行中のシェルで関数とエイリアスを生成するためにsourceコマンドを実行する必要がある理由でもあります。スクリプトのみを実行すると、使用しているシェルから作成するのではなく、新しいシェルを作成してそのシェルで作成するためです。

関連情報