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

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

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

VALORACIÓN DEL ARTÍCULO:
5/5


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

TAMBIÉN TE INTERESA

acceder-a-snapchar-web

Snapchat se estrena en la web y testea con la realidad aumentada

Snapchat ha anunciado novedades a lo largo de estos últimos días. La más mediática es que ahora la popular aplicación de mensajería variopinta también estará disponible en la web. En un principio, el servicio solo estará disponible en este canal para los suscriptores de Snapchat+ en Estados Unidos, Reino Unido, Canadá, Australia y Nueva Zelanda.

oppo-chamions-League

OPPO, una marca de Champions League

OPPO jugará la Champions League la temporada que viene y otra adicional. La marca de dispositivos ha anunciado un patrocinio muy importante que le aportará una gran visibilidad en los próximos meses. Concretamente, el acuerdo firmado con la UEFA incluye la presencia de la marca en las competiciones de la Champions, la Supercopa, las finales

nuevo-Nothing-Phone

Nothing Phone (1): llega el teléfono más rompedor de los últimos tiempos

El mercado de la telefonía necesitaba un soplo de aire fresco como el que representa Nothing Phone (1). La compañía liderada por el que fuera fundador de One Plus acaba de anunciar un nuevo smartphone que promete ser el más rompedor del momento. Los consumidores nos habíamos acostumbrado a ciertos estándares de diseño tanto en

ecommerce

¿Vendes en Amazon? Sácale todo el partido al Amazon Prime Day

Se viene el gran evento mundial del año para Amazon y, por ende, el ecommerce. Los próximos 12 y 13 de julio llegan las rebajas más exclusivas para los clientes del marketplace. El Amazon Prime Day es el momento que muchos compradores esperan para adquirir productos de todo tipo a un precio reducido. Pero más

nube-de-acens

Aprovecha los descuentos en la nube de acens por su 25 aniversario

Desde 1997 hasta 2022 han pasado 25 años en los que acens, Part of Telefónica Tech, se ha convertido en una de las empresas pioneras del mundo digital, una de las tecnológicas más longevas de España y de las más innovadoras del mundo.   Desde su nacimiento en 1997, acens ha sido protagonista de algunos

iconos redes sociales

Las 5 redes sociales más atractivas para las empresas

Hoy es el día de las redes sociales y como tal, queremos informar a empresas y particulares sobre dos puntos de interés sobre estos canales. En primer lugar hablaremos de marketing y explicaremos cuáles son las mejores redes para las marcas. Y en segundo lugar nos centraremos en las ciberamenazas, las cuales están experimentando un