Bashプログラミング
 Computer >> コンピューター >  >> プログラミング >> Bashプログラミング

【図解】.bash_profile・.bashrc・.bash_login・.profile・.bash_logout の実行順序を徹底解説

Bash シェルの起動時や終了時には、複数の設定ファイルが決まった順序で読み込まれます。本記事では、以下のファイルがどのような順序で実行されるのかを、擬似コードと実際の検証手順を交えてわかりやすく解説します。

  • /etc/profile
  • ~/.bash_profile
  • ~/.bashrc
  • ~/.bash_login
  • ~/.profile
  • ~/.bash_logout

対話型ログインシェルの実行順序

対話型ログインシェルを起動した際、これらのファイルは次の擬似コードに示す順序で実行されます。

execute /etc/profile
IF ~/.bash_profile exists THEN
    execute ~/.bash_profile
ELSE
    IF ~/.bash_login exist THEN
        execute ~/.bash_login
    ELSE
        IF ~/.profile exist THEN
            execute ~/.profile
        END IF
    END IF
END IF

重要なポイントは、~/.bash_profile が存在すれば ~/.bash_login や ~/.profile は実行されないという点です。つまり、これら3つのファイルは優先順位に従い、最初に見つかった1つだけが実行されます。

一方、ログインシェルからログアウトする際は、以下の順序で処理が行われます。

IF ~/.bash_logout exists THEN
    execute ~/.bash_logout
END IF

なお、/etc/bashrc は ~/.bashrc の中から呼び出されて実行されます。標準的な ~/.bashrc には、次のような記述が含まれています。

# cat ~/.bashrc
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi

対話型非ログインシェルの実行順序

ターミナル上で新たに起動したシェルなど、ログインを伴わない対話型シェルの場合は、~/.bashrc のみが読み込まれます。

IF ~/.bashrc exists THEN
    execute ~/.bashrc
END IF

補足: スクリプト実行時などの非対話型シェルが起動されるときは、環境変数 ENV を参照し、その値として指定されたファイルが実行されます。

実行順序の検証方法

実行順序を確認する簡単な方法が、各ファイルに異なる PS1 の値を設定し、シェルに再ログインして、どの値がプロンプトに反映されるかを観察することです。PS1 を使って Linux プロンプトを機能的かつスタイリッシュにカスタマイズする方法は、以前の記事でも紹介しています。

1. /etc/profile が実行されることを確認

/etc/profile に以下の PS1 行を追加し、再ログインします。プロンプトがこの値に変われば、/etc/profile が実行されたことが確認できます。

# grep PS1 /etc/profile
PS1="/etc/profile> "

[Note: re-login to see the prompt change as shown below]
Last login: Sat Sep 27 16:43:57 2008 from 192.168.1.2
/etc/profile>

※ このテストを正しく行うには、~/.bash_profile 内に PS1 の設定が含まれていないことをあらかじめ確認してください。

2. ~/.bash_profile が実行されることを確認

続いて、~/.bash_profile、~/.bash_login、~/.profile、~/.bashrc のそれぞれに異なる PS1 を設定します。そのうえで再ログインすると、プロンプトには ~/.bash_profile の PS1 値が反映されます。

/etc/profile> grep PS1 ~/.bash_profile
export PS1="~/.bash_profile> "

/etc/profile> grep PS1 ~/.bash_login
export PS1="~/.bash_login> "

/etc/profile> grep PS1 ~/.profile
export PS1="~/.profile> "

/etc/profile> grep PS1 ~/.bashrc
export PS1="~/.bashrc> "

[Note: Upon re-login, it executed /etc/profile first and ~/.bash_profile next.
So, it took the PS1 from ~/.bash_profile as shown below.
It also did not execute ~/.bash_login, as ~/.bash_profile exists]
Last login: Sat Sep 27 16:48:11 2008 from 192.168.1.2
~/.bash_profile>

再ログイン時には、まず /etc/profile が実行され、次に ~/.bash_profile が実行されます。~/.bash_profile が存在するため ~/.bash_login はスキップされ、結果として ~/.bash_profile の PS1 が採用されます。

3. ~/.bash_login が実行されることを確認

.bash_profile を別名にリネームしてから再ログインすると、今度は ~/.bash_login の PS1 がプロンプトに反映されます。

~/.bash_profile> mv .bash_profile bash_profile_not_used

[Note: Upon re-login, it executed /etc/profile first.
Since it cannot find ~/.bash_profile, it executed ~/.bash_login]
Last login: Sat Sep 27 16:50:55 2008 from 192.168.1.2
~/bash_login>

4. ~/.profile が実行されることを確認

さらに .bash_login も別名にリネームして再ログインすると、~/.profile の PS1 が反映されます。

~/.bash_login> mv .bash_login bash_login_not_used

[Note: Upon re-login, it executed /etc/profile first.
Since it cannot find ~/.bash_profile and ~/.bash_login, it executed ~/.profile]
Last login: Sat Sep 27 16:56:36 2008 from 192.168.1.2
~/.profile>

5. 非ログインシェルでの ~/.bashrc の実行を確認

コマンドプロンプトで「bash」と入力すると、新しい非ログインシェルが起動し、~/.bashrc が読み込まれます。

~/.profile> bash

[Note: This displays PS1 from .bashrc as shown below.]
~/.bashrc> exit
exit

[Note: After exiting from non-login shell, we are back to login shell]
~/.profile>

まとめ

ログインシェルでは「/etc/profile → ~/.bash_profile(~/.bash_login → ~/.profile のどれか1つ)」の順に読み込まれ、ログアウト時には ~/.bash_logout が実行されます。一方、非ログインの対話型シェルでは ~/.bashrc のみが読み込まれます。この順序を理解しておくと、環境変数やエイリアスをどのファイルに記述すべきか判断でき、シェル環境のトラブルシュートにも役立ちます。

  1. CMOSとは何か?仕組みやBIOSとの違い、主な用途を徹底解説

    CMOS(Complementary Metal Oxide Semiconductor:相補型金属酸化膜半導体)は、パソコンのマザーボード上に搭載された小容量のメモリで、BIOSの設定情報を保存するために使用されています。日付や時刻の管理、一部のハードウェア設定など、システムの動作に欠かせないデータを保持しており、パソコンにとって非常に重要な存在です。この記事では、CMOSとは何か、そして何に使用されるのかを詳しく解説します。 CMOSとは何か? CMOSは、前述のとおりマザーボード上に搭載された小容量の記憶領域で、BIOSの設定を保存するために使われます。N型トランジスタとP型トランジスタ

  2. Microsoft Edgeで複数のユーザープロファイルを作成・切り替えて使う方法

    家族とパソコンを共有しているなら、ブラウザに複数のユーザープロファイルを設定しておくのがおすすめです。プロファイルを分けておけば、拡張機能・設定・閲覧履歴・ブックマーク・クレジットカード情報・メールなどをユーザーごとに独立して管理でき、ブラウザにサインインしたときにそれぞれ自分の環境へアクセスできます。 かつて複数プロファイル機能が最も使いやすいブラウザといえばGoogle Chromeでした。Chromeは2016年にいち早くこの機能を導入し、その後他のブラウザも追随しましたが、使い勝手の面でChromeに匹敵するものは少なかったのが実情です。 しかし近年、Chromiumベースの新