Cómo y por qué usaría la variable $ SHLVL

La variable $ SHLVL se usa para decirle cuántos shells tiene de profundidad. Si está confundido por esto, vale la pena comenzar desde el principio. ¿Qué es un caparazón?

La variable $ SHLVL se usa para decirle cuántos shells tiene de profundidad. Si está confundido por esto, vale la pena comenzar desde el principio.

¿Qué es un caparazón?

Un shell toma comandos y los entrega 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, incluidos C Shell (tcsh) y KORN shell (ksh).

Cómo acceder al shell de Linux

En general, como usuario, interactúa con el programa de shell mediante el uso de un programa de emulación de terminal como XTerm, konsole o gnome-terminal.

Si está ejecutando un administrador de Windows 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 atajo CTRL ALT y T también abrirán 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 presionando 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 nivel de shell. Dentro de un shell, puede abrir otro shell que lo convierte en un subshell o el shell que lo abrió.

Por lo tanto, el shell padre se consideraría quizás el shell de nivel 1 y el shell hijo sería un shell de nivel 2.

Cómo mostrar el nivel de shell

Según el título del artículo, no debería sorprendernos que la forma en que se puede saber en qué nivel de shell se está ejecutando es utilizando la variable $ SHLVL.

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

 echo $ SHLVL 

Curiosamente, si ejecuta el comando anterior dentro de una ventana de terminal, se sorprenderá al ver que el resultado devuelto es 2.

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

¿Por qué es este el caso que podrías preguntar? Bueno, el entorno de escritorio que está ejecutando se ejecuta sobre un shell. Ese shell sería el nivel 1. Cualquier ventana de terminal que abra desde ese entorno de escritorio debe ser un elemento secundario del shell que abrió el entorno de escritorio y, por lo tanto, el nivel del shell no puede comenzar en ningún número que no sea 2.

El tty no ejecuta un entorno de escritorio y, por lo tanto, es simplemente un shell de nivel 1.

Cómo crear subcapas

La forma más fácil de probar el concepto de conchas y subconchas 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 dentro de la ventana de terminal, escriba lo siguiente:

 sh 

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

Si ahora escribe esto de nuevo:

 echo $ SHLVL 

Verá que el nivel de shell se establece en 3. Al ejecutar el comando sh desde el subshell, se abrirá un subshell del subshell y, por lo tanto, el nivel del shell estará en el nivel 4.

¿Por qué es importante el nivel Shell?

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

Comencemos 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 un nuevo shell escribiendo lo siguiente:

 sh 

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

 echo $ perro 

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

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

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

 export dog = maisie 
echo $ dog

Como era de esperar, se muestra la palabra maisie. Ahora abra una subshell y escriba echo $ dog nuevamente. Esta vez verás que la palabra maisie se muestra aunque estés en una subshell.

La razón de esto es que el comando de exportación convirtió la variable $ dog en global. Cambiar la variable $ dog dentro de la subshell incluso si usa el comando de exportación no tiene ningún efecto en sus shells principales.

Con suerte, de esto puede ver que conocer el nivel de shell en el que está trabajando tiene cierta importancia al escribir scripts.

Los ejemplos que he dado son muy simplistas, pero es bastante 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 ahora se ejecutan en diferentes niveles. Conocer el nivel de shell puede ser muy importante.

Rate article
labsfabs.com
Add a comment