回答:
~/.bashrcそして/etc/bash.bashrcインタラクティブたびに実行されbash、シェルが起動されています。
これとは対照的に、~/.profileおよび/etc/profile任意のたびに実行され、ログインシェルが起動されています。したがって、bashシェルである必要はありませんが、ログインシェルである必要があります(多くのbashシェルインスタンスはログインシェルではありません)。
bashシェルはそれを提供するシェルプログラムであるシェルでbashはなくなどの他のプログラムよりも、dash。したがって、エントリを追加するコマンドをファイルに入れると、次のようPATHになりbashrcます。
シェルがでない場合は何もしませんbash。これはよくあることです。たとえばPATH、グラフィカルログインセッションでは、変更されません。PATHコマンドラインプログラムで使用されるだけではないことを覚えておいてください。
入れ子になったbashシェルがある場合は、繰り返し追加します。したがって、シェル内でシェルを起動する場合(これは、さまざまな理由で非常に一般的です)、複数の~/binエントリがにスタックされますPATH。これにより、PATH環境変数が読みにくくなり、パフォーマンスが低下することもあります。
これらは望ましくありません。したがって、これをファイルに入れるのは間違っていbashrcます。それは本当に属してい~/.profileます。~/.profileある適切な場所のためには:
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
非ログインシェルは、親としてログインシェル(またはログインシェルのように動作するもの)を持ちPATH、このログインシェルからを含む環境変数のほとんどを継承します。したがって、パス変更コマンドを配置~/.profileするには、それらを有効にするためにログアウトしてから再度ログインする必要がありますが、非ログインシェルの環境にも影響します(シェルではないプログラムの環境にも影響します。親プロセスから継承された独自の環境変数のセット(「環境」と呼ばれます)。
binログオンしたときにプライベートディレクトリが存在せず、このログインセッション中に作成したようです。ログアウトして再度ログインすると、それは内にありますPATH。プライベートbinディレクトリの作成は一度だけ行う必要があるため、これは1回限りの不便です。