web-dev-qa-db-ja.com

/etc/bash.bashrcはいつ呼び出されますか?

とにかくこのファイルは何ですか? Documentation は言及しません。また、自動的に実行されることは想定されていません(バージョン4.3、2014年2月2日):

対話型ログインシェルとして、または--loginで呼び出されます

Bashが対話型ログインシェルとして、または--loginオプションを使用して非対話型シェルとして呼び出されると、ファイル/ etc/profileが存在する場合、そのファイルからコマンドを読み取り、実行します。そのファイルを読み取った後、〜/ .bash_profile、〜/ .bash_login、および〜/ .profileをこの順序で検索し、存在していて読み取り可能な最初のコマンドからコマンドを読み取って実行します。シェルの起動時に--noprofileオプションを使用して、この動作を禁止できます。

ログインシェルが終了すると、Bashは〜/ .bash_logoutファイルが存在する場合、ファイルからコマンドを読み取って実行します。

対話型の非ログインシェルとして呼び出されます

ログインシェルではないインタラクティブシェルが起動すると、Bashは〜/ .bashrcからコマンドを読み取って実行します(そのファイルが存在する場合)。 --norcオプションを使用すると、これを禁止できます。 --rcfile fileオプションは、Bashが〜/ .bashrcの代わりにfileからコマンドを読み取って実行するように強制します。

したがって、通常、〜/ .bash_profileには次の行が含まれます

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

ログイン固有の初期化の後(または前)。

非対話的に呼び出されます

Bashが非対話的に開始されると、たとえば、シェルスクリプトを実行するために、環境内で変数BASH_ENVを探し、そこに表示されている場合はその値を展開し、展開された値を読み取りおよび実行するファイルの名前として使用します。 。 Bashは、次のコマンドが実行されたかのように動作します。

if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi

ただし、PATH変数の値は、ファイル名の検索には使用されません。

上記のように、非対話型シェルが--loginオプションで呼び出された場合、Bashはログインシェルの起動ファイルからコマンドを読み取って実行しようとします。

6
x-yuri

DebianのbashREADME から:

  1. とは /etc/bash.bashrc?文書化されていないようです。

    Debianバージョンのbashは、特別なオプション(-DSYS_BASHRCbashを読み取ります/etc/bash.bashrc~/.bashrc対話型の非ログインシェル用。したがって、Debianシステムでは/etc/bash.bashrc~/.bashrc なので /etc/profile~/.bash_profile

8
Stephen Kitt

技術的には、/etc/bash.bashrcは、すべてのユーザーのインタラクティブな非ログインbashシェルに対して呼び出されます。

ただし、通常は/etc/profile(すべてのログインシェルで呼び出されます)も/etc/bash.bashrcを呼び出します。つまり、/etc/bash.bashrcもすべてのログインシェルで呼び出されます。

ただし、最初の行は通常、非対話型の場合は終了をチェックします。

したがって、最終的には、すべての対話型bashシェル(ログインおよび非ログイン)に対して事実上/etc/bash.bashrcが実行されます。システム全体の~/.bashrcと考えてください。

2
wisbucky

man bashから:

ログインシェルではないインタラクティブシェルが起動すると、bashは/etc/bash.bashrcおよび〜/ .bashrcからコマンドを読み取り、これらのファイルが存在する場合はそれらを実行します。 --norcオプションを使用すると、これを禁止できます。 --rcfile fileオプションは、bashが/etc/bash.bashrcおよび〜/ .bashrcの代わりにfileからコマンドを読み取って実行するように強制します。

あなたが引用したドキュメントは最新のものではないようです。

1
Anthon