ことの発端
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
に書いたほうが効率的だと思う。