web-dev-qa-db-ja.com

ログインシェルとインタラクティブシェルの違いは何ですか?

login Shellinteractive Shellとは何ですか、また.bash_profile.bashrcとは何ですか?

52
caesar

対話型シェルは、-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スクリプトは起動ファイルを読み取りません。

67
cdarke

おそらく「シェル」が何であるかを知っており、それを使用しているので、あなたの質問はログインシェルと他のすべての間のdifferenceのみを対象としています...

ログインシェルは、起動時に1つ以上の初期セットアップスクリプト(リソース)がロードされるという点でのみ、他のシェルとは異なります。通常、名前に「profile」が付いています。そこでは、その後開かれたシェルに由来する基本設定が定義されます(したがって、それらは一度だけ定義する必要があります)。

3
arkascha