.bashrc
私はand .bash_profile
(またはその問題について).bash_login
の違いを理解していますが、bashシェル設定を~/.profile
選択する特別な理由はありますか?.bashrc
.bash_profile
.bashrc
私が理解したのは、新しいbashウィンドウが開くたびに、端末の色、環境変数などの設定が再ロードされます。.bash_profile
ログイン時に一度だけロードされ、これほど十分だと思います。それで、なぜ.bashrc
そこに何も入れますか?
私が考えることができる唯一の理由は、構成をロードするためにシステムからログアウトする必要がないことです。
純粋に伝統的な理由以外は答えを見つけることができません。
答え1
シェルオプション(shopt
またはset
)は環境を通して継承されません。どちらもありませんニックネーム。たとえば、すべてのシェルを有効にするには、failglob
RCファイルに含める必要があります。エイリアスをエクスポートした関数に置き換えることができますが、これらのオプションの回避策はありません。
道路伝統的で、マニュアルに.bash_profile
ソースを持つことをお勧めします。.bashrc
したがって、ここで入力した設定はログインシェルと非論理シェルの両方にロードされます。のみ存在する場合は、.bash_profile
実際に使用しているシェルにロードされない可能性があります。
別のケースは、実際の実行コード(たとえば、いくつかの高度なコード)で構成がより複雑であることです。PROMPT_COMMAND
)すべてのシェルで新しく初期化された変数を使用しようとしています。これらの変数はまったくエクスポートされないかもしれませんし、配列ですがエクスポートできない変数かもしれません。
最後のケースはコマンド実行の副作用です。fortune
タスクのリストが各新しいシェルに表示されます。これはシェルの動作を設定するのと同じくらい「構成」ではありません。
ログインシェルとして呼び出されないより一般的なケースもありますbash
(セッションマネージャが他の操作を実行したり、ログインシェルではないため...)。.bash_profile
まったく処理されません。しかし、これはあなたが心配する以上のものかもしれません。
答え2
定義した関数またはエイリアスは、ファイルでのみ定義した場合はサブシェルでは使用できませんprofile
。
このsource
コマンドを使用すると、ログアウトせずにファイルを再ロードできますが、パスが変更された場合、パスがわずかに破損する可能性があります。.
エイリアス自体ですがsource
、時にはシステム管理者が再マッピングすることもあります(理由はわかりません)。
これは、実行中のシェルで関数とエイリアスを生成するためにsourceコマンドを実行する必要がある理由でもあります。スクリプトのみを実行すると、使用しているシェルから作成するのではなく、新しいシェルを作成してそのシェルで作成するためです。