~/.bash_profileと~/.bashrcと/etc/profileと~/.profile
いつ誰が何を読み込むのか
ログインシェル起動時
ログインシェルとは、ユーザーがシステムにログインするとき起動されるシェルのことを指す。ログインシェルが起動する例は以下である。
- Ctrl+Alt+F2などで起動した仮想コンソールからログインするとき
- 外部の端末からSSH接続してログインするとき
非ログインシェル起動時
非ログインシェルとは、ユーザーがシステムにログインしたあとに起動されるシェルのことを指す。ログインシェルが起動する例は以下である。
- デスクトップやVSCodeから新しいターミナルを起動するとき
- デスクトップやVSCodeのターミナルから新しいタブを起動するとき
- suコマンドでユーザーを切り替えるとき
- bashコマンドでbashを起動するとき
どれに何を書くべきか
色々トラブった結果、自分用に何か環境変数を追加するときは~/.bashrcが安定だと思う。
/etc/profile
システム全体で使用する設定ファイル。全てのユーザーに共通の設定を行いたい場合はこのファイルに記述する。
1システムにSSHで100人のユーザーがアクセスする場合役に立つのかもしれないが、1システム1ユーザーの使い方でこのファイルを書き換えることはないだろう。
~/.profile
各ユーザー個別の設定ファイル。ユーザーがシステムにログインしたときに読み込まれる。
環境変数はここに書くのが良いという意見が多いのだが、個人的には環境変数は~/.bashrcに書いたほうが確実じゃないかと思う。(理由は環境変数は後勝ちで、かつフロー上~/.profileの読み込みの後は~/bashrcが読み込まれるから)
~/.bash_profile
UbuntuやRaspberry Pi OSでは~/.profileが同じ役割を果たすので、使わない。
~/.bashrc
各ユーザー個別の設定ファイルであり、Bashを起動する度に読み込まれる。
エイリアス、関数、プロンプトの設定は~/.bashrcに書く。
| ~/.bashrc | |
|---|---|
1 2 3 4 5 6 7 8 9 10 11 12 | |
設定を反映させる
以下のコマンドで編集した~/.bashrcを起動中のシェルに反映させることができる。
1 | |
参考: 実験結果
準備
Raspberry Pi OSの各ファイルの先頭付近に以下を追記する。
| /etc/profile | |
|---|---|
1 | |
| ~/.bash_profile | |
|---|---|
1 | |
| ~/.bashrc | |
|---|---|
1 | |
| ~/.profile | |
|---|---|
1 | |
システムを再起動する。
1 | |
以下、色々な操作をして出力を確認してみる。
LXTerminalを起動したとき
1 2 | |
LXTerminalで新しいタブを起動したとき
1 2 | |
シェル上でユーザーを切り替えたとき
1 2 3 4 5 | |
bashを起動したとき
1 2 | |
外部の端末からSSH接続したとき
1 2 | |
~/.bash_profileがない状態で外部の端末からSSH接続したとき
1 2 3 4 | |