Macを使ってると .bash_profile や .bashrc という言葉をよく耳にします。違いは分からなくてもログイン時(ターミナル起動時)に実行されるファイルという認識はあると思いますが、改めて違いなどをまとめておきます。
.bash_profileと.bashrcの違い
Man page of BASH によると、.bash_profile はログインシェルとして起動されると読み込まれ、.bashrc はログインシェルでない対話的シェルとして起動されると読み込まれるとあります。
ログイン時に読み込まれる優先順位は次のとおりです。
- ~/.bash_profile
- ~/.bash_login
- ~/.profile
.bash_profile と .bashrc の違いを調べると.bashrc もログイン時に実行されると書いてある記事が多いのですがどうしてなんでしょう。実際に試して確認してみたいと思います。
ファイルを用意して確認
実際に各ファイルにメッセージを仕込んで確認してみます。気になるのは .bashrc はログイン時に読み込まれるのか?という点。ちなみに実行環境はMac OS X 10.10です。
$ echo 'echo "[.bash_profile]が実行されました。"' >> ~/.bash_profile $ echo 'echo "[.bash_login]が実行されました。"' >> ~/.bash_login $ echo 'echo "[.profile]が実行されました。"' >> ~/.profile $ echo 'echo "[.bashrc]が実行されました。"' >> ~/.bashrc
まず、全ファイルが存在する場合は .bash_profileのみが読み込まれました。
Last login: Sun Mar 22 17:34:15 on ttys000 [.bash_profile]が実行されました。 $
.bash_profile が無い状態だと .bash_login が読み込まれます。
Last login: Sun Mar 22 17:34:32 on ttys000 [.bash_login]が実行されました。 $
.bash_profile と .bash_login が無い場合は .profile が読み込まれます。
Last login: Sun Mar 22 17:35:28 on ttys000 [.profile]が実行されました。 $
.bash_profile と .bash_login と .profile が無い場合でも .bashrc は読み込まれませんでした。
Last login: Sun Mar 22 17:41:34 on ttys000 $
じゃあいつ .bashrc が読み込まれるのかというと対話的シェルとして起動される時点で読み込まれるということみたいです。
$ bash [.bashrc]が実行されました。 bash-3.2$
もっと詳細を知りたい方はマニュアルを見てください。