Estoy usando "Red Hat Enterprise Linux Server versión 7.1 (Maipo)".
Cuando estoy en un shell sin inicio de sesión, el nivel mínimo de shell (echo $SHLVL) comienza en el nivel mínimo 2 y aumenta con subsiguientes -shells.
Pero cuando estoy usando un shell de inicio de sesión, el nivel mínimo de shell (echo $SHLVL) comienza en el nivel mínimo de shell 2 y aumenta con los subshells sucesivos.
[Pregunta] ¿Por qué hay una diferencia en el nivel mínimo de shell entre el shell de inicio de sesión (comienza en el nivel mínimo de shell 1) y el shell sin inicio de sesión (comienza en el nivel mínimo de shell 2)?
Estoy usando bash.
Respuesta aceptada:
Desde la página man de bash:
SHLVL Se incrementa en uno cada vez que se inicia una instancia de bash.
Como puede ver, esta variable no está relacionada con el hecho de si es un shell de inicio de sesión o no. Simplemente significa que su shell bash ha sido iniciado por otro shell bash. Dado que no sabemos qué está haciendo exactamente para obtener su shell, no puedo decir por qué tiene una invocación de shell anidada, pero aquí hay algunos casos comunes:
-
Está iniciando una nueva ventana de terminal desde la línea de comando
-
Está utilizando alguna función del sistema operativo para iniciar una nueva ventana de terminal, y esta función se implementa iniciando primero un bash que luego ejecuta el terminal que luego ejecuta un nuevo shell
-
Tienes un
bash
recursivo llame a su .bash_profile que se ejecuta cada vez que SHLVL es igual a 1 (esto suena extraño, ¡pero ya lo he visto dos veces!)