bashrcが反映されないなーと思ったので調べてみた。
すると、原因は
.profile が無かった。
なので
.profile にbashrc を読込設定を書いた
bashrc読込設定は/.profileに書いておけばいい。(Debianのデフォルトを貰ってきた→後述)
このとき、~/.profileに書いて大丈夫か心配になったので調べてみた。
設定に関するファイルの一覧
bash環境変数に関する設定は次のファイルに依って構成されていました。
/etc/profile ~/.bash_profile ~/.bash_login ~/.profile /etc/bash.bashrc ~/.bashrc
どの順に読み込まれるか調べてみた。
各ファイルは自分のファイル名だけを出力する設定にして、その他を全部コメントアウトした
/etc/profile
を空っぽにしてEchoだけして読込順を調べることにした。
## ## 他を全てコメントアウト ## echo "/etc/profile"
環境設定ファイルについても、同じようにファイル名をECHOするだけのを書いた。
読込順を調べた結果
SSHで接続したら、表示は次のようになりました。
takuya@KURO-BOX:~$ ssh localhost Linux KURO-BOX 2.6.25.1-kurobox #1 Fri Dec 24 18:05:03 JST 2010 ppc Last login: Sun Jan 2 20:42:21 2011 from 127.0.0.1 /etc/profile ~/.profile
ログインシェルで実行されるのは~/.profile
ログイン時に設定される設定ファイル。ログインシェル(つまりログイン)で参照される設定はProfile系だけでした。
さらにbashを実行したらナニが読み込まれるか
Bashの設定ファイルは読み込まれてなかったので、さらにBashを起動しました。
-bash-3.2$ bash /etc/bash.bashrc ~/.bashrc
bashrcが読み込まれました。
これはなぜか
ログインシェルは色々替わるので。そのままではBashrcを読み込みません。
ここまでのまとめ
ログイン時(SSH接続時)
/etc/profile ~/.bash_profile
が読み込まれる。このファイルはそれぞれ
| ファイル名 | 役割 |
|---|---|
| /etc/profile | システム全体設定 |
| ~/.profile | ユーザー固有設定 |
になっていました。
この読込順は、さらに細かくなっています。
bash起動時
/etc/bash.bashrc ~/.bashrc
が、この順番で読み込まれました。このファイルはそれぞれ役割があり、profileと同じく、ユーザー・システム全体で分かれています。
| ファイル名 | 役割 |
|---|---|
| /etc/bash.bashrc | システム全体bash設定 |
| ~/.bashrc | ユーザー固有bash設定 |
になっていました。
bashrc を読み込むポイントはどこですか。
では、ログイン時にbashrcを読み込むにはどこに書くべきでしょうか。/etc/profileでしょうか。~/.profileでしょうか。
.profile でもイイですが、Bashでは~/.bash_profile に書きます。
bash がログインシェルで実行された場合 ~/.bash_profile を読み込みます。~/.profileは 他のシェル設定が書かれているかもしれないので、汚染を防ぐためだと考えられます。
bashしか使わないなら、.profileで問題ないのです。
~/.profileの内容
~/.profileのデフォルトに書かれています。
僕のDebianには次のように書かれていました。
# ~/.profile: executed by the command interpreter for login shells.
# ~/.profile は他のログインシェルも実行するファイルです。
# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
# exists.
# この~/.profileは .bash_profileや .bash_login があれば、Bashは読みません
# see /usr/share/doc/bash/examples/startup-files for examples.
# さらに詳しい例は、次のファイルを呼んでみてください。/usr/share/doc/bash/examples/startup-files
# the files are located in the bash-doc package.
# the default umask is set in /etc/profile; for setting the umask
# for ssh logins, install and configure the libpam-umask package.
#umask 022
# if running bash
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
まとめ
bashしか使わないなら、~/.profileに設定書いちゃって構わない。
~/.profile に ~/.bashrc を呼び出す設定を書けばいい。
