はじめに

サメさん、今Linuxの勉強をしてるんだけど、.bashrcと.bash_profileって何が違うの?

随分ニッチなところが気になるんだね!
でも素晴らしいと思うよ。
具体的に何で悩んでたの?

環境変数を設定しようとしたんだけど、bashrcとbash_profileどちらに記述したらいいのか悩んでて、記事ググってみたんだけど、どちらでもいいって記事が多くて・・・

どちらでもよくはないんだよなぁ。
使い分けが結構重要だからね。

せっかくだから何が違うのか整理して考えようか!

やった〜!!
前提
mac
macOS Mojave 10.14.5
bash
参考サイト
https://techracho.bpsinc.jp/hachi8833/2019_06_06/66396
https://qiita.com/magicant/items/d3bb7ea1192e63fba850
そもそもbashって?

おさらいだけど、クマくんbashってなんだっけ?

そんなの決まっているじゃないか!
シェルの1種だよ。
他には確か・・・fishとかzshとかがあるんだよね。

そうそうその通り!
詳細は下の記事をみてもらえばいいと思うんだけど、
要はパソコンに指令を出すための仲介役だったよね。
.bashrcと.bash_profile

そしたら.bashrcと.bash_profileのイメージは分かるかな?

うーん、、、
どちらもbashが動く前の設定ファイルだってことは分かるんだけど、違いは正直分からないや。

そうだね!
動く前の設定ファイルであることは間違いないね。
あとはそれぞれの読み込むタイミングと記述する内容を整理しようか!
.bash_profile
- .bash_profileはログインした時に読み込まれる。(bashがログインシェルだった場合)
- 初期設定で必要なものを記述しておくと良い。
- 環境変数は各プロセスで共通しているので、.bash_profileに記述する

.bashrc
- bashが対話モードとして起動する度に読み込まれる。
- 要はコマンドを打つ度に読み込まれる。
- エイリアスやコマンドの補完を記述する。

補足

な、なるほど・・・!
こういう違いがあったのか。
.bashrcがコマンドを打つ度に読み込まれるって全然知らなかったよ・・・!

そうそう。
なんでもbash_profileに記述すればいいってものでもないんだよね。

他のシェルも同時に使っていく場合なんかは.profileに記述する必要もあるしね。
まとめ

最後にまとめて見ようか!

OK〜!
.bash_profileには環境変数だったり、PCの設定で必要な記述をする。
.bashrcにはコマンドラインで使うエイリアスやターミナルの設定を書いていく
って感じかな!

ざっくりそういう理解でいいと思うよ!
参考サイトをみてみると本当はもっと細かな使い分けをした方がいいって載っていたんだけど、初学者の人たちがそこまで細かく設定をしなければいけないシーンもないと思うし、最低限でいいと思うんだ。

確かに・・・
シェルをいちいち変えて使ったりもしないしね。

そうなんだよね。
でも、色々勉強しているうちにとりあえず.bash_profileに書いとけ〜みたいになって.bash_profileに何を書いているか分からなくなっちゃうからね。
使い分けして最低限管理しておくと良いと思うんだ。

そうだね、ありがとう〜!

PCを操作する上で、
Linuxの勉強とても重要だからね。
色々な参考書あるけど、この本たちがおすすめだよ。