基本的に、シェルがログインであるかどうか、インタラクティブであるかどうかは、1つの理由だけで重要です。
初期化ファイルとデフォルトのオプションセットは、シェルがログインしているかどうか、および対話型かどうかによって異なります。
同様に、シェルがログインしているか、対話型であるかどうかは、使用される呼び出し(正確なコマンド名とオプション)のみに依存します。
それ以外の場合、2つのプロパティは直交します。シェルがログインしているかどうかは、シェルが対話型かどうかの判断に影響しません。
次のいずれかに該当する場合、Bashはログインシェルを開始します。
argv[0]
、起動されたコマンドの名前は、 -
-l
オプションが指定されています
同様に、bashは次のいずれかに該当する場合、インタラクティブシェルを開始します。
- 実行するファイル(コマンドが指定されていない
bash some/file
)または実行するコマンド文字列(bash -c 'foo'
)が指定されていません(実際の状態はもう少し複雑です。マニュアルを参照してください)
-i
オプションを指定しました
特に(逆説的に)、後者bash -ic 'foo'
は対話型シェルを開始することを意味します。
そのため、次の例では、対話型のログインは何も関係なく、呼び出しはログインとは無関係であるにもかかわらず、ログイン型の対話型シェルを開始します。
bash -lic true
コンソールまたはGUIを介してログインすると、ログインシェルが起動する(または起動しない可能性がある)ことは、適切な呼び出しを使用したログインプロセスの影響です。
条件と効果の詳細については、bashマニュアルの「スタートアップファイル」セクションを参照してください。
混乱の主な原因は、「ログイン」シェルには別の一般的な意味があることです。
ユーザーのログインシェルは、そのユーザーのpasswd
エントリで定義されているシェルです(/etc/passwd
LDAP、または他のソースから取得される場合があります)。
login
プログラム等、SSHは、このシェルを起動し、ログインをリードして-その答えの残りの部分に意味意味で、シェル-
は通常、コマンド名に。特に混乱させたい場合は、次のように言うことができます。
一部のログインプロセスは、ログインシェルとしてユーザーのログインシェルを開始します。
開発者が便利だと思ったため、GUIログインは純粋にログインシェルを開始することに注意してください-LightDMはログイン時にスクリプトを実行します。これは明らかにインタラクティブではなく、ユーザーのログインシェルに依存しません ただし、ディスプレイマネージャーがログインシェルを起動することに依存しないでください。すべてがそうするわけではなく、WaylandとGNOMEでは、ログインプロセスはシェルスクリプトをまったく使用しません。
non-interactive login shell
。