$SLVLが非ログインであるシェルではレベル2で始まりますが、RHEL 7のログインシェルではレベル1で始まるのはなぜですか?

$SLVLが非ログインであるシェルではレベル2で始まりますが、RHEL 7のログインシェルではレベル1で始まるのはなぜですか?

私は「Red Hat Enterprise Linux Serverバージョン7.1(Maipo)」を使用しています。非ログインシェルにある場合、シェルレベル($SHLVL)は2から始まり、連続したサブシェルに応じて増加します。ただし、ログインシェルを使用すると、シェルレベルは1から始まり、連続したサブシェルに増加します。

質問:ログインシェル(1から始まる)と非ログインシェル(2で始まる)の最小シェルレベルに違いがあるのはなぜですか?

GUI端末でbashを使用しています。

[aditya@vulcan ~]$ echo $SHLVL
2
[aditya@vulcan ~]$ su -l aditya
Password:
Last login: Fri Jan 12 11:38:56 IST 2018 on :0
[aditya@vulcan ~]$ echo $SHLVL
1
[aditya@vulcan ~]$

ベストアンサー1

GUIセッションにログインすると、セッションを確立するスクリプトが非対話型ログインシェルで実行されます。 、/etc/profileyourなどを読み、~/.[bash_]profileGUIセッション全体の環境を設定します。その後、シェルはスクリプトを実行してデスクトップ環境を起動します。効果的に、それセッションのシェルはSLVL 1です。

Xセッション設定スクリプトは、exec実際にデスクトップ環境を起動する最後のコマンドです。これは、セッションのプロセスツリービューでシェルプロセス()が見つからない理由を説明しますps xf。シェルは操作を完了して消え、対応する環境変数(およびカスタムulimitなどの他の継承可能な設定)のみがデスクトップ環境から継承されます。すべての子プロセスに渡す基本プロセスです。これにより、デスクトップメニューから起動されたプログラムにも.bash_profileに設定した環境変数があるため、期待どおりに機能します。

ターミナルウィンドウはログインシェルで起動するように設定することもでき、SLVL 1になります。少なくともDebianのKDEはこのようなことをしているようです。

おすすめ記事