debian: bash セッション構成ファイルの読み取り順序が一貫していません。

debian: bash セッション構成ファイルの読み取り順序が一貫していません。

3つのファイルをこの順序で読みますか?

.bash_profile
.profile
.bashrc

端末を初めて開くと、これは発生しません。

init.logファイルに添付されているファイルにトレースステートメントがあります。下記をご覧ください。端末を開いた後に起動します。 suコマンドの後にログの場所を表示するコメントを追加しました。

stephen@debian:~$ cat init.log
reading .bashrc
done reading .bashrc
stephen@debian:~$ su - stephen
Password: 
stephen@debian:~$ cat init.log
reading .bashrc
done reading .bashrc
#
# after su
#
reading .bash_profile
reading .profile
reading .bashrc
done reading .bashrc
done reading .profile
done reading .bash_profile
stephen@debian:~$ 

したがって、su - loginは予想されるシーケンスをトリガーしますが、初期ログインではbashrcのみを読み込みます。これは正しいことはできません。どのような状況でこれが起こるのかを説明できる人はいますか?最初の読み込みに予想されるすべてのファイルが含まれるようにbashrcと設定ファイルを変更できますが、問題の原因を見つけてそこから修正することをお勧めします。

答え1

答えは、bashが3つのファイルをすべて探しますが(状況はわずかに異なります)、通常それらのうちの1つだけが実行されるということです。

実行時ログインシェルにログインするsu -と、システム全体で実行されます(通常、端末にログインしたり、GNOME 端末などを開くときまたは を使用すると、またはように見えて実行されます)。/etc/profile~/.bash_profile~/.bash_login~/.profile最初それが探しているもの。

Bashのマニュアルページから:

bashがこのオプションを使用して対話型ログインシェルまたは非対話型シェルとして呼び出されると、まず--loginファイル /etc/profile(ファイルが存在する場合)からコマンドを読み取り、実行します。ファイルを読み込んだ後~/.bash_profile~/.bash_login、 を順に探して存在~/.profileし、読み取れる最初のファイルからコマンドを読み込み実行します。--noprofileこのオプションを使用すると、シェルの起動時にこの動作を無効にできます。

bashがインタラクティブシェル(より具体的にはログインではなくインタラクティブシェル)で実行されている場合は、~/.bashrcこのファイルを読み込んで実行します。

Bashのマニュアルページから:

ログインシェルではなくインタラクティブシェルを起動すると、bashは~/.bashrcファイルが存在する場合にコマンドを読み取り、実行します。--norcこのオプションを使用すると、これを抑制できます。 file--rcfile オプションはbashが~/.bashrc

Linuxディストリビューションがよくすることは、パブリッシュ~/.bash_profileとファイル~/.profile~/.bashrc互いにリンクして、ファイル間で設定を繰り返すことなく、より一貫した動作をすることです。

たとえば、Debian のデフォルト値には~/.profile次のコードスニペットが含まれています。

# if running bash
if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
        . "$HOME/.bashrc"
    fi
fi

したがって、明示的にソースが提供されるため、~/.bashrcログインと非ログインの対話型シェルの両方に、このファイルに追加されたカスタムコンテンツが含まれます。

関連情報