GNU/Linux >> Linux の 問題 >  >> Linux

$ shlvlが非ログインシェルではレベル2で開始するのに、Rhel 7のログインシェルではレベル1で開始するのはなぜですか?

「RedHatEnterpriseLinux Serverリリース7.1(Maipo)」を使用しています。
非ログインシェルを使用している場合、最小シェルレベル(echo $ SHLVL)は最小レベル2から始まり、サブが続くにつれて増加します。 -shells。
しかし、login-shellを使用している場合、最小シェルレベル(echo $ SHLVL)は最小シェルレベル2から始まり、サブシェルが続くにつれて増加します。

[Que。]ログインシェル(最小シェルレベル1から開始)と非ログインシェル(最小シェルレベル2から開始)の最小シェルレベルに違いがあるのはなぜですか?

私はbashを使用しています。

承認された回答:

bashのmanページから:

SHLVLbashのインスタンスが開始されるたびに1ずつ増加します。

ご覧のとおり、この変数は、ログインシェルであるかどうかとは関係ありません。これは、bashシェルが別のbashシェルによって開始されたことを意味します。シェルを取得するために何をしているのか正確にはわからないため、ネストされたシェル呼び出しがある理由はわかりませんが、一般的なケースをいくつか示します。

  • コマンドラインから新しいターミナルウィンドウを開始しています

  • いくつかのOS機能を使用して新しいターミナルウィンドウを開始しています。この機能は、最初にbashを開始してからターミナルを実行し、次に新しいシェルを実行することで実装されます

  • 再帰的なbashがあります SHLVLが1に等しいときに実行される.bash_profileを呼び出します(これは奇妙に聞こえますが、これはすでに2回見ています!)


Linux
  1. 正規表現がXで機能するのに、Yでは機能しないのはなぜですか?

  2. ログインシェルと非ログインシェルの違いは?

  3. ルートユーザーがSudo権限を必要とするのはなぜですか?

  1. Bashrcが現在のシェルがインタラクティブであるかどうかをチェックするのはなぜですか?

  2. 「sudo-i」ログインシェルがヒアドキュメントのコマンド文字列引数を壊すのはなぜですか?

  3. これが「読み取り中」にターミナルで機能するのに、シェルスクリプトでは機能しないのはなぜですか?

  1. ログインシェルと非ログインシェルの間のConfファイルの読み取りとは何ですか?

  2. Bashの正規表現が変数であり、直接ではない場合にのみ機能するのはなぜですか?

  3. CentOS / RHEL :ユーザーのログイン シェルを変更する方法