.bash_profile と .bashrc は何が違うの?使い分けを覚える
普段 Windows で GitBash を起動して Bash しか使わない人とか、Mac OSX デフォルトのターミナルしか触らない人とかは、これらの違いやそれによる利便を感じることはないと言える。自分も今のところ、「分かれていることで便利だ」と感じるようなことはない。
ただ、世間一般的にどういう風に捉えられているのか、自分はどう使い分けておくといいのかを整理しておこう。
動きを整理する
まずは .bash_profile
と .bashrc
の中身を以下のようにしてみることで、それぞれのファイルの動きを整理してみよう。
# .bash_profile
echo This is .bash_profile
# .bashrc を読み込む
test -r ~/.bashrc && . ~/.bashrc
# .bashrc
echo This is .bashrc
このような状態で、例えば GitBash を、例えばターミナル.app を起動してみる。するとどうなるか。
This is .bash_profile
This is .bashrc
$
このように、.bash_profile
が .bashrc
を読み込もうとしているので、このように実行されている。ちなみに、.bash_profile
内に .bashrc
を読み込むコマンドを書かないと、.bashrc
は読み込まれない。
ではターミナルを起動後、bash
コマンドで新たに Bash を起動したらどうなるか。
$ bash
This is .bashrc
$
今度は .bash_profile
は読み込まれておらず、.bashrc
だけが読み込まれていることが分かる。
よく云われている、
.bash_profile
はログイン時に1回だけ実行される.bashrc
はシェルを起動するたびに実行される
とはこういう動作のことを指している。
だから、例えば GUI 環境を持つ Linux マシンにログインして、画面上からターミナルを起動すると、.bash_profile
は実行されず、.bashrc
だけが実行される。Linux に既にログインしているからだ。
.bash_profile
はログイン時に1回だけ実行される
さて、じゃあ .bash_profile
には何を書くのが良いのだろうか。答えは、環境変数を書くものとして扱うのが良い。
環境変数とは、export
コマンドで宣言する変数だ。この環境変数はプロセス間で共有されるので、シェルを起動するたびに何度も呼ぶ必要がない。
だから、.bash_profile
は環境変数を書いたら、さっさと .bashrc
を読み込んで終わらせてしまうだけの、普段はあんまりカスタマイズしないところとしておくと良いだろう。
.bashrc
はシェルを起動するたびに実行される
一方、.bashrc
はシェルを起動するたびに実行されるので、環境変数ではない変数だとか、エイリアスとか、独自のシェル関数を宣言しておくと良い。
.bash_profile
に alias
コマンドでエイリアスを登録してしまうと、ターミナルを起動後に bash
コマンドで新たなシェルを起動したときに、.bash_profile
に書いた alias
は読み込まれない。エイリアスは .bashrc
に書いた方が良い。
エイリアスなら、環境変数よりは色々弄る機会が多いと思うので、「普段は .bashrc
に書く」と覚えてしまって良いだろう。
参考
- 本当に正しい .bashrc と .bash_profile の使ひ分け - Qiita
- .bash_profileと.bashrcについて - Qiita
- .bash_profileと .bashrcの設定
- .bash_profileと.bashrcの違いが覚えられないあなたへの処方箋 · DQNEO起業日記
- .bash_profileと.bashrc の違いについて - ex1-lab
- bashrcの設定の読み込まれる順番 - それマグで!
- .bashrc と .bash_profile 結局どっちを使えばいい? : 王様うさぎの部屋
- .bash_profile ? .bashrc ? いろいろあるけどこいつらなにもの? - Qiita