シェルとはなんぞや〜その②

前回までのあらすじ

.bash_profileについて学んでたんだけどそもそもシェルってなんなの?って思って調べたました。

シェルはカーネルへのサービスのアクセスを提供するものということ。ようするにmacのターミナル(ものすごく大雑把にくくっています)ということです。

それで、シェルには色々種類があるのだ、というところまで確認しました。macのデフォルトはbashです。

起動ファイルの順序

とりあえず、ITメディア エンタープライズさんの記事にある文章を引用しますと。

ユーザーがログインに成功した後、bashは「ログインシェル」として一般的に以下のような流れでファイルを順次検索し、ファイルが存在していれば実行し起動します。

  1. /etc/profileを実行

  2. /etc/profileによって、/etc/profile.dディレクトリ配下のすべてのファイルを実行

  3. ログインユーザーのホームディレクトリにある~/.bash_profileを実行*

  4. ~/.bash_profileによって、~/.bashrcを実行

  5. ~/.bashrcによって、/etc/bashrcを実行

bashが起動時に実行するファイル - ITmedia エンタープライズより引用)

bashの起動(ログイン)時には上記のような順番でファイルが読み込まれているようです。

わかったこと

/etc/profileと/etc/bashrc

一番最初に読み込まれているらしいファイルは、etc/profileです。

中身は以下のようになっています。

# System-wide .profile for sh(1)

if [ -x /usr/libexec/path_helper ]; then
        eval `/usr/libexec/path_helper -s`
fi

if [ "${BASH-no}" != "no" ]; then
        [ -r /etc/bashrc ] && . /etc/bashrc
fi

はっきりとしたことはよくわかんないのですが、${BASH-no}とやらが存在するならば/etc/bashrcが読み込まれている...という感じでしょうか?

では続いて/etc/bashrcを見てみると

# System-wide .bashrc file for interactive bash(1) shells.
if [ -z "$PS1" ]; then
   return
fi

PS1='\h:\W \u\$ '
# Make bash check its window size after a process completes
shopt -s checkwinsize

[ -r "/etc/bashrc_$TERM_PROGRAM" ] && . "/etc/bashrc_$TERM_PROGRAM"

こちらは完全に意味不明です...orz

この2つのファイルは

すべてのユーザーに影響を与えるグローバルな初期設定が記述されており、「システムプロファイル」と呼ばれています。

らしいです。ものすごーく大事なファイルです。よほどのことがない限りあんまり編集しないほうがよさそうです。

まとめ

こんかいのまとめです。

  1. bashの起動時には、/etc/profile/etc/bashrcが実行される
  2. この2つのファイルは「システムプロファイル」と呼ばれる