.profile(.bashrcではなく)が〜/ binをパスに追加するのはなぜですか?


9

以来.bashrc(その意味では、より「一般的」である.profileソースがそれ)、なぜ「が含まれる~/binパスに」の手順は、内部ではありませんか.bashrc?ユーザーが非ログインシェルでそれを望まないのはなぜですか?(特に最近では、非ログインシェルがより一般的です*)。

手動で変更できることはわかっていますが、理由があるかどうか知りたいです。

*証明できませんが、そうだと思います。

回答:


13

~/.bashrcそして/etc/bash.bashrcインタラクティブたびに実行されbash、シェルが起動されています。

これとは対照的に、~/.profileおよび/etc/profile任意のたびに実行され、ログインシェルが起動されています。したがって、bashシェルである必要はありませんが、ログインシェルである必要があります(多くのbashシェルインスタンスはログインシェルではありません)。

  • bashシェルはそれを提供するシェルプログラムであるシェルでbashはなくなどの他のプログラムよりも、dash
  • ログインシェルは、ログインの結果として自動的に起動するシェルであり、ログイン用のユーザーインターフェイス(グラフィカルまたはコマンドライン)を提供します。ログインシェルが終了すると、ログインは終了します。

したがって、エントリを追加するコマンドをファイルに入れると、次のようPATHになりbashrcます。

  1. シェルがでない場合は何もしませんbash。これはよくあることです。たとえばPATH、グラフィカルログインセッションでは、変更されません。PATHコマンドラインプログラムで使用されるだけではないことを覚えておいてください。

  2. 入れ子になった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するには、それらを有効にするためにログアウトしてから再度ログインする必要がありますが、非ログインシェルの環境にも影響します(シェルではないプログラムの環境にも影響します。親プロセスから継承された独自の環境変数のセット(「環境」と呼ばれます)。


わかります。しかし、この決定はまだ私には意味がありません。現在ターミナルを開いていると、.bashrcのみが読み込まれ、プライベートビンが表示されません。
2013

@borgesデフォルトの設定でうまくいかない場合は、自由に変更してください。(結局のところ、それはあなたのコンピュータです。あるいは少なくともあなたのアカウントです。)しかし、これは1回限りのことのように聞こえます。つまり、binログオンしたときにプライベートディレクトリが存在せず、このログインセッション中に作成したようです。ログアウトして再度ログインすると、それは内にありますPATH。プライベートbinディレクトリの作成は一度だけ行う必要があるため、これは1回限りの不便です。
Eliah Kagan 2013

3

これは、従来の環境変数は/etc/profileまたはにしか含まれないため.profileです。このbashrcファイルは、エイリアス、プロンプト設定、シェルオプションなど(つまり、シェルに直接関連するもの)用です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.