Cómo usar la variable $SHLVL para mostrar el nivel de Shell


La variable $SHLVL se utiliza para decirle cuántas conchas de profundidad tiene. Si estás confundido por esto, vale la pena empezar por el principio.

¿Qué es una concha?

Un shell toma comandos y los da al sistema operativo subyacente para que los ejecute. En la mayoría de los sistemas Linux el programa de shell se llama BASH (The Bourne Again Shell) pero hay otros disponibles incluyendo el Shell C (tcsh) y el shell KORN (ksh).

Cómo acceder a la shell de Linux

Generalmente, como usuario, usted interactúa con el programa shell a través del uso de un programa de emulación de terminal como XTerm, konsole o gnome-terminal.

Si está ejecutando un gestor de ventanas como Openbox o un entorno de escritorio como GNOME o KDE encontrará un emulador de terminal desde un menú o un guión. En muchos sistemas, el acceso directo CTRL ALT y T también abrirá una ventana de terminal.

Alternativamente, puede cambiar a otro TTY (teletipo) que proporciona acceso directo a un shell de línea de comandos. Puede hacerlo pulsando CTRL ALT y F1 o CTRL ALT y F2, etc.

Qué es un nivel de Shell

Cuando ejecuta un comando en un shell, se ejecuta en algo llamado el nivel de shell. Dentro de una shell, puede abrir otra shell que la convierte en una subshell o en la shell que la abrió.

Por lo tanto, la shell madre sería considerada quizás la shell de nivel 1 y la shell hija sería una shell de nivel 2.

Cómo mostrar el nivel de Shell

No debería ser una sorpresa basado en el título de la variable $SHLVL para saber en qué nivel de shell se está ejecutando.

Para ver el nivel de shell en el que se está ejecutando actualmente, escriba lo siguiente:

echo $SHLVL>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>»»»>>>>>>>>>>>>»»»»>>>)

De manera interesante, si ejecuta el comando anterior dentro de una ventana de terminal, puede sorprenderse al ver que el resultado devuelto es 2.

Sin embargo, si ejecuta el mismo comando usando la tty, el resultado es 1.

¿Por qué es este el caso que usted podría preguntar? Bueno, el entorno de escritorio que está ejecutando se está ejecutando en la parte superior de un intérprete de comandos. Ese proyectil sería de nivel 1. Cualquier ventana de terminal que abra desde ese entorno de escritorio debe ser hija de la shell que abrió el entorno de escritorio y, por lo tanto, el nivel de shell no puede comenzar con ningún otro número que no sea 2.

El tty no está ejecutando un entorno de escritorio y por lo tanto es simplemente un shell de nivel 1.

Cómo crear subconjuntos

La manera más fácil de probar el concepto de shells y subshells es la siguiente. Abra una ventana de terminal y escriba lo siguiente:

echo $SHLVL>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>»»»>>>>>>>>>>>>»»»»>>>)

Como sabemos por una ventana de terminal el nivel mínimo de shell es 2.

Ahora, en la ventana del terminal, escriba lo siguiente:

sh

El comando sh por sí solo ejecuta un shell interactivo, lo que significa que está usando un shell dentro de un shell o subshell.

Si ahora escribe esto de nuevo:

echo $SHLVL>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>»»»>>>>>>>>>>>>»»»»>>>)

Verá que el nivel de shell está ajustado a 3. Ejecutando el comando sh desde dentro de la subcarpeta se abrirá una subcarpeta de la subcarpeta y así el nivel de la misma estará en el nivel 4.

¿Por qué es importante el nivel de Shell?

El nivel de shell es importante cuando se piensa en el alcance de las variables dentro de sus scripts.

Empecemos con algo simple:

dog=maisie
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>""">>>>>>>>>>>>>>>>>>>>>""">>">))))echo $dog

Si ejecuta el comando anterior en un shell, la palabra maisie se mostrará en la ventana del terminal.

Abra una nueva shell escribiendo lo siguiente:

sh

Si ejecuta este comando, verá que no se devuelve nada:

echo $dog

Esto se debe a que la variable $dog sólo está disponible en el nivel de shell 2. Si escribe exit para salir del subshell y ejecutar echo $dog de nuevo, la palabra maisie se mostrará de nuevo.

También vale la pena pensar en el comportamiento de las variables globales dentro de una concha.

Comience en una nueva ventana de terminal y escriba lo siguiente:

perro de exportación=maisie
echo $dog

Como es de esperar, se muestra la palabra maisie. Ahora abra un subshell y vuelva a escribir echo $dog. Esta vez verá que la palabra maisie se muestra aunque usted se encuentre en un subshell.

La razón de esto es que el comando export hizo que la variable $dog fuera global. Cambiar la variable $dog dentro de la subshell incluso si usa el comando export no afecta a sus shells padre.

Esperamos que a partir de esto pueda ver que conocer el nivel de shell en el que está trabajando tiene cierta importancia a la hora de escribir scripts.

Los ejemplos que he dado son muy simplistas, pero es muy común que un script de shell llame a otro script de shell que a su vez llama a otro script de shell, todos ellos ejecutándose en diferentes niveles. Conocer el nivel de shell puede ser muy importante.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *