ひよこ3:07のTechブログ

Mac OS X と Ubuntu で共通の .bashrc を使う

.bashrc.bash_profile

~/.bashrc~/.bash_profile は Bash の設定を書くファイル。 Bash を使うとき一番最初に実行される。同じようなファイルに ~/.bash_login ~/.profile /etc/profile /etc/bashrc などがある。

~/.bashrc はインタラクティブシェルとして実行された時だけ実行される(べき)ファイル。 $ bash のようににすると何度も実行される可能性がある。 PROMPT_COMMANDPS1 などインタラクティブシェルのための環境変数を設定したり、エイリアスや関数を定義する。

~/.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 でも、この書き方で問題なさそう。

参考