login Shell
とinteractive Shell
とは何ですか、また.bash_profile
と.bashrc
とは何ですか?
対話型シェルは、-sが指定され、-cオプションを指定せず、入力とエラー出力の両方が端末に接続されている場合(isatty(3)によって決定される)、または-iオプション。
対話型シェルは通常、ユーザーの端末から読み取りおよび書き込みを行います。
[ gnu bashマニュアル ]
login Shellは、ログインするシェルです。ログインシェルはps -f
リスト、プログラム名の先頭にハイフンが付きます。次に例を示します。
root 3561 3553 0 09:38 pts/0 00:00:00 -bash
qa 7327 3432 0 10:46 pts/1 00:00:00 -bash
対話型シェルは、標準入力、通常は端末からコマンドを読み取るシェルです。
たとえば、xtermまたはPuTTY
などのターミナルエミュレータを使用してbashにログインすると、セッションはログインシェルと対話型セッションの両方になります。次にbash
と入力すると、対話型シェルに入りますが、ログインシェルではありません。
シェルスクリプト(シェルコマンドを含むファイル)が実行された場合、それはログインシェルでもインタラクティブシェルでもありません。
起動ファイルはbashで高度に調整可能です:
ログインbashシェルが呼び出されると、/etc/profile
はソースになっています(現在の環境で実行されます)。その後、3つのファイルの存在が確認されます。これらのファイルのチェックは次の順序で行われます。
if /etc/profile
存在、ソース(実行)
if ~/.bash_profile exists
、ソース(実行)
if ~/.bash_login exists
、ソース(実行)
if ~/.profile exists
、ソース(実行)
一致が見つかると、他のファイルが存在しても無視されます。 /etc/bashrc
ファイルは、~/.bash_profile
そしてその ~/.bashrc
ファイル。つまり、/etc/bashrc
ファイルは、ログインシェルであるか非ログインシェルであるかに関係なく、bashのすべての対話型呼び出しで取得されます。
したがって、.bashrc
ファイルは、新しいインタラクティブシェルを要求するたびにも実行されます。これには、シェルスクリプトは含まれません。通常、変数、エイリアス、または関数はこのファイルに配置されます。
適切に指示された場合、Bash Shellスクリプトは別のファイルを読み取ります。ユーザーが(通常、自分の.bash_profile
) 変数 BASH_ENV
にはファイル名が含まれ、スクリプトはこれを読み取ります。この変数が設定(およびエクスポート)されていない場合、bashスクリプトは起動ファイルを読み取りません。
おそらく「シェル」が何であるかを知っており、それを使用しているので、あなたの質問はログインシェルと他のすべての間のdifferenceのみを対象としています...
ログインシェルは、起動時に1つ以上の初期セットアップスクリプト(リソース)がロードされるという点でのみ、他のシェルとは異なります。通常、名前に「profile」が付いています。そこでは、その後開かれたシェルに由来する基本設定が定義されます(したがって、それらは一度だけ定義する必要があります)。