ztbuz@dev

人生に絶望しているZが、それでも技術を身につけようと必死になるブログ

/etc/profile.d/とはなんのためのディレクトリなのか調べてみた

Chefでrbenvをインストールするレシピを書いているのですが、とある参考記事に「bash/etc/profile.d/以下に配置する」とありました。 「なぜここなの?」と思ったので、メモします。

/etc/profile.d/とは

/etc/profile.d/の役割をいろいろ調べてみたところ、このディレクトリはアプリケーションごとのbashを配置するディレクトリらしいです。

たとえば、rbenvをインストールするなら、そのbash/etc/profile.d/rbenv.shとなる、ということらしいです。 まあ、慣例なのでその方が分かりやすいですよ〜、程度だと思います(たぶん)。

bashの実行順序

そもそもbashはどう走査されるのか、という話です。 参考記事によると、bashは以下の順序で実行されるようです。

  1. /etc/profileを実行
  2. /etc/profileによって、/etc/profile.dディレクトリ配下のすべてのファイルを実行
  3. ログインユーザーのホームディレクトリにある~/.bash_profileを実行
  4. ~/.bash_profileによって、~/.bashrcを実行
  5. ~/.bashrcによって、/etc/bashrcを実行

/etc/profileの中身

上記1-5の2はどういうことよ、と思ったので確認してみました。 /etc/profileの中には、以下のような記述があります。 なるほどな〜、という感じですね。

for i in /etc/profile.d/*.sh ; do
    if [ -r "$i" ]; then
        if [ "${-#*i}" != "$-" ]; then
            . "$i"
        else
            . "$i" >/dev/null 2>&1
        fi
    fi
done

そんな感じでした。 すっきりしました。 めでたしめでたし。