.bashrc
と .bash_profile
~/.bashrc
と ~/.bash_profile
は Bash の設定を書くファイル。 Bash を使うとき一番最初に実行される。同じようなファイルに ~/.bash_login
~/.profile
/etc/profile
/etc/bashrc
などがある。
~/.bashrc
はインタラクティブシェルとして実行された時だけ実行される(べき)ファイル。 $ bash
のようににすると何度も実行される可能性がある。 PROMPT_COMMAND
や PS1
などインタラクティブシェルのための環境変数を設定したり、エイリアスや関数を定義する。
~/.bash_profile
~/.bash_login
~/.profile
はログインした時に1度だけ実行される。 PATH
の設定などを行う。
/etc/*
はそのシステム全体の設定なので基本的に触らない。
ついでにログアウトした時に実行される .bash_logout
というのもある。$ bash
したあと $ exit
したときには実行されない。用途は知らない。
しかし、これらのファイルは環境によって読み込まれるタイミングが違う。共通の設定を使うには少し考えて使う必要がある。
以下ログインシェルが bash
になっている前提。他のシェルを使っている場合はぜんぜん違うはず。
Ubuntu の場合
Ubuntu では次の手順で処理がされる。
- ログインしたとき
~/.profile
があるか確認して実行
- Bash (ターミナル)を開いた時
~/.bashrc
があれば実行
なにもしないと ~/.bash_profile
.bash_login
は実行されない。
~/.profile
を編集しても、もう一度ログアウトとログインをするまで再読み込みはされない。編集後はターミナルを開くたびに $ exec bash -l
とかする必要がある。
OS X の場合
OS X では 次の手順で処理がされる。
- Bash (ターミナル) を開いたとき
~/.bash_profile
があるか確認して実行- なければ
~/.bash_login
があるか確認して実行 - 両方なければ
~/.profile
があるか確認して実行
なにもしないと ~/.bashrc
は実行されない。 ~/.bash_profile
で ~/.bashrc
を実行するように書くのが一般的みたいだ。
Ubuntu と OS X で共通の ~/.bash_profile
~/.bashrc
を使う
GitHub で dotfiles を管理して使うとき、環境ごとにファイルを分けたりするのは面倒だしイケてない。同じファイルを使えるようにする。
~/.profile
と .~/bashrc
をそれぞれ用意して、次の .bash_profile
を用意する。
# .bash_profile
source ~/.profile
source ~/.bashrc
Ubuntu の場合はログインした時点で .profile
が実行され、ターミナルを開いたときに .bashrc
が実行される。
OS X の場合はターミナルを開いたタイミングで .bash_profile
が実行されて、 その中で .profile
と .bashrc
が実行される。
.profile
はシェルが bash
以外の環境でも実行される可能性があるので、そのことを踏まえて書くほうがいいのかもしれない。 Bash しか使わないなら問題になることはなさそう。
Docker を使って軽く確認した限り CentOS でも、この書き方で問題なさそう。