.bash_profileと.bashrcの違いについてまたグーグル検索。もう何回目だ…
備忘のためにメモしておく。 『入門bash』3章、「環境のカスタマイズ」を参考にしました。
以下3つのファイルを意識しておけばよさそう。ユーザーごとの設定。
- .bash_profile …ログイン時に読み込まれる
- .bash_logout …ログアウト時に読み込まれる
- .bashrc …新しいシェルの起動時に読み込まれる
以下のファイルも特殊ファイルとして認識されるが、自分はあまり使う機会はなさそう。これもユーザーごとの設定。 ログイン時に.bash_profile, .bash_login, .loginの順に検索される。
- .bash_login …Cシェル由来
- .profile …Bourneシェル、Kornシェル由来
(.profileについては、他のシェルとの移行|共存がかんたんだよ、ということかな。.bash_loginはCシェル利用者に設計が理解しやすいというだけか?自分はこれらのシェルの設定ファイルを使わないので不要な知識…)
以下はシステム全体の設定。あまり変更することはないだろう。
- /etc/profile …ログイン時に読み込まれる
理解が不安な、.bash_profile, .bashrc, /etc/profileの挙動を確認してみた。シャープイコール大なり(#=>)の行はコメント。
#=> まずは.bash_profile, .bashrcの確認 $ echo echo .bash_profile is loaded. >> ~/.bash_profile $ echo echo .bashrc is loaded. >> ~/.bashrc #=> bashrc, bash_profileにechoを仕込む。 $ echo $SHELL /usr/bin/fish #=> ふだんはfishがログインシェル $ bash #=> インタラクティブだがログインシェルではないbashを起動。.bashrcが読まれるはず。 .bashrc is loaded. #=> 期待通り。 $ bash #=> bash内でさらにbashを起動してみる。 .bashrc is loaded. #=> もう一度読まれる。まあそうか。 $ ps --forest #=> プロセスはこんな状態。 PID TTY TIME CMD 18565 pts/0 00:00:01 fish 21358 pts/0 00:00:00 \_ bash 21368 pts/0 00:00:00 \_ bash 21385 pts/0 00:00:00 \_ ps $ exit $ exit $ bash --login #=> ログインシェルとしてbashを起動。.bash_profileが読まれるはず。 .bash_profile is loaded. #=> そのとおり。 $ ログアウト $ echo source .bash_profile >> .bashrc #=> .bashrcが読まれたら、.bash_profileも読まれるようにする。非ログインシェルでも、ログインシェル立ち上げ時に読まれるコードも読まれるようになる。 $ bash .bashrc is loaded. .bash_profile is loaded. $ echo source .bashrc >> .bash_profile #=> .bash_profileが読まれたら、.bashrcも読まれるようにする。無限ループになるはず $ exit $ bash --login .bash_profile is loaded. .bashrc is loaded. .bash_profile is loaded. .bashrc is loaded. .bash_profile is loaded. .bashrc is loaded. .bash_profile is loaded. .bashrc is loaded. .bash_profile is loaded. .bashrc is loaded. .bash_profile is loaded. .bashrc is loaded. .bash_profile is loaded. ... ... #=> 期待通り無限ループ。 ^C$ ログアウト $ vim .bash_profile $ vim .bashrc #=> sourceの行を削除して、無限ループにならないようにする。 #=> 最後に/etc/profileの挙動を確認する $ echo 'echo etc/profile is loaded.' | sudo tee --append /etc/profile #=> /etc/profile に書き込み。sudo権限が必要なため、このような書き方に $ bash --login etc/profile is loaded. .bash_profile is loaded. $ ログアウト $ sudo vim /etc/profile #=> 片付け。さっきのechoを消しておく $ vim .bashrc .bash_profile #=> 片付け。echoを消す
以上