インタラクティブシェルと非インタラクティブシェルの基本的な違いを理解しています。しかし、ログインシェルと非ログインシェルの正確な違いは何ですか?
非ログインインタラクティブの使用例を教えてください シェル?
承認された回答:
ログインシェルは、インタラクティブセッションにログインするときにユーザーIDで実行される最初のプロセスです。ログインプロセスは、シェルに、通常はシェル実行可能ファイルの名前である引数0を-
で渡すという規則に従って、ログインシェルとして動作するように指示します。 接頭辞付きの文字(例:-bash
通常はbash
です。 。ログインシェルは通常、環境変数の設定などを行うファイルを読み取ります:/etc/profile
および~/.profile
従来のBourneシェルの場合、~/.bash_profile
さらにbashの場合、/etc/zprofile
および~/.zprofile
zshの場合、/etc/csh.login
および~/.login
cshなどの場合
テキストコンソール、SSH、またはsu -
でログインする場合 、インタラクティブログインを取得します シェル。 (Xディスプレイマネージャーで)グラフィカルモードでログインすると、ログインシェルは取得されず、代わりにセッションマネージャーまたはウィンドウマネージャーが取得されます。
非対話型ログインを実行することはめったにありません シェルですが、一部のX設定では、プロファイルファイルの読み取りを調整するために、ディスプレイマネージャーでログインしたときにこれを実行します。その他の設定(これはディストリビューションとディスプレイマネージャーによって異なります)は、/etc/profile
を読み取ります。 および~/.profile
明示的に、またはそれらを読まないでください。非対話型ログインシェルを取得する別の方法は、端末ではない標準入力を介して渡されるコマンドを使用してリモートでログインすることです。 ssh example.com <my-script-which-is-stored-locally
(ssh example.com my-script-which-is-on-the-remote-machine
とは対照的 、非対話型、非ログインシェルを実行します。
既存のセッション(画面、X端末、Emacs端末バッファー、別の内部のシェルなど)の端末でシェルを開始すると、対話型の非ログインが得られます。 シェル。そのシェルはシェル構成ファイル(~/.bashrc
)を読み取る可能性があります bash
として呼び出されたbashの場合 、/etc/zshrc
および~/.zshrc
zshの場合、/etc/csh.cshrc
および~/.cshrc
cshの場合、ENV
で示されるファイル sh
として呼び出された場合の、dash、ksh、bashなどのPOSIX/XSI準拠のシェルの変数 、$ENV
設定されている場合、~/.mkshrc
mkshなどの場合)。
シェルがスクリプトまたはコマンドラインで渡されたコマンドを実行する場合、それは非対話型、非ログインです。 シェル。このようなシェルは常に実行されます。プログラムが別のプログラムを呼び出すと、実際にはシェルで小さなスクリプトを実行して他のプログラムを呼び出すことがよくあります。この場合、一部のシェルはスタートアップファイルを読み取ります(bashはBASH_ENV
で示されるファイルを実行します 変数、zshは/etc/zshenv
を実行します および~/.zshenv
)、ただしこれにはリスクが伴います。シェルはあらゆる種類のコンテキストで呼び出すことができ、何かを壊さないようにできることはほとんどありません。
少し簡略化しています。厄介な詳細については、マニュアルを参照してください。