ことの発端
Ubuntuの色がなくなった!!?
.bash_profileを作って設定を追加するとなぜか色が消えた。ls --color=autoを使ってlsの色は何とかしたもののユーザー名などが色がつかない。
原因
.bashrcが読み込まれていなかった
解決策
以下のサイトを参考に.bashrcを読み込むように.bash_profileを設定すること
簡単に説明すると、.bashrcが存在すれば読み込むという設定を.bash_profileに書けば大丈夫。
原因発覚から改善まで
原因発覚
いろいろ記事を見ると.bash_profile -> .bashrcの順番で呼び出されると書いてあったが、もしかしたら.bash_profileがなければ.bashrcを呼び出すという意味ではないかと思った。
原因が本当にそれなのかの確認
.bashrc以下を追加した
echo "call bashrc"
.bash_profile以下を追加した
echo "call bash_profile"
これらは.bashrcなどが呼ばれていたらcall bashrcと表示するスクリプトになっている。
実行すると予想通りcall bash_profileとしか表示されなかった。予想通り、.bash_profileしか呼び出されていないことが分かった。
調べて解決
こんな感じで.bash_profileに.bashrcを読み込む設定を書くだけでOK!
if [ -r "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
補足
いろいろ調べてみると、.bash_profileはログインシェル(初めて起動するときやbash --loginでbashを起動したときのシェル)でのみ読み込まれ、.bashrcは.bash_profileが読み込まれていないときに読み込まれる場合が多いらしい。
以下のブログの図がとても分かりやすい
.bash_profileを読み込みたいけど、.bashrcは読み込みたくないなんて場面は多分ないので、今回みたいに.bash_profileから.bashrcをロードするのがいいと思う。逆に.bashrcから.bash_profileを読み込むのはやめたほうがいい(.bash_profileは一度しか読み込まないものを記述するべきなのに、.bashrcからロードすると何度も読み込まれてしまう)
じゃあ.bash_profileと.bashrcってどうやって分けたらいいの?っていうと、個人的には環境変数を.bash_profileに書くのがいいと思っている。
環境変数はシェルを何回開いても前回の変数を引き継ぐ性質がある。
例えば、.bashrcにexport $PATH="$PATH:/opt/local/bin"みたいなのを書いていたとする。この状態でbash、bash、bashと三回実行すると、$PATHのなかには/opt/local/binが三つ入っていると思う。/opt/local/binは一つあれば十分なので.bash_profileに書いておいても大丈夫ということである(実際に.bash_profileに書いておくと何回bashと入力しても$PATHには/opt/local/binが一つだけになる)。
こんな感じで、環境変数みたいな実行しなおしても前回の状態を引き継ぐタイプのものは.bash_profileに書いたほうが効率的だと思う。