GNU/Linux >> Tutoriales Linux >  >> Linux

¿Qué es Subshell en Linux?

Ya conoces el shell. Es un programa que te permite ejecutar comandos en Linux. Su principal interacción con Shell es cuando ejecuta comandos en una terminal.

Tarde o temprano, te encontrarás con un término llamado 'subshell' y eso puede confundirte.

¿Qué es una subcapa?

Un subshell es básicamente un nuevo shell solo para ejecutar un programa deseado. Un subshell puede acceder a las variables globales establecidas por el 'shell principal' pero no a las variables locales. Cualquier cambio realizado por un subshell a una variable global no se pasa al shell principal.

¿Tiene sentido? Probablemente no. Déjame explicarte las cosas en detalle con ejemplos.

Aquí hay un script de una línea que muestra el valor de la variable 'var'.

echo $var

Establecí el valor de esta variable en LHB, ¿qué crees que se mostrará cuando se ejecute el script?

¡Sorpresa! El script no ve el valor de la variable var había fijado antes.

Los scripts de shell se ejecutan en subshell (por defecto)

¿Por qué? Porque cuando ejecuta un script de shell, se ejecuta en su propio shell. Dado que este shell se origina en otro shell (donde establece la variable y ejecuta el script), se llama subshell.

El script de shell no pudo ver el valor de la variable porque era una variable local y el shell recién creado no lo conocía. Si desea que sus subcapas accedan a la variable, deberá usar el comando exportar y convertirla en una variable global.

También puede crear subshell lanzando nuevos shells desde sus shells existentes. Solo ejecuta bash y estarás en una subcapa. Puede usar el comando exit para cerrar/salir del shell y regresar al shell original.

No piense en subshell como una nueva ventana de terminal. Sé que es difícil de visualizar pero es así.

Usé la variable para mostrar la diferencia entre los dos shells (padre y subshell). La variable var no se exportó en este caso y, por lo tanto, el subshell no lo conocía.

Subcapas anidadas

También puede crear subcapas anidadas, de la misma manera. Después de exportar una variable, permanece exportada a todas las subcapas creadas posteriormente.

Puede cambiar el valor de la variable exportada en una subcapa. El valor modificado se pasará a las subcapas posteriores (porque la variable en sí es global), pero si sale y vuelve a la capa original, se conserva el valor original.

¿Por qué? Porque el valor de la variable exportada se copia en la subcapa. Y es la copia la que se cambia (de LHB a HOC). El valor original sigue siendo el mismo en el shell principal.

Así que tenga esto en cuenta, no hay forma de cambiar el valor de una variable en un shell principal desde dentro de un subshell . No importa si exporta la variable o no, la variable no se cambiará en el shell principal.

Consejo extra:Ejecute un script de shell en el shell actual

El comportamiento normal es que un script de shell se ejecute en su propio shell, es decir, un subshell.

Puede cambiar este comportamiento y ejecutar un script de shell en el shell actual gracias al comando de shell integrado llamado punto (.).

No, no es lo mismo que ejecutar un script de shell como este ./script. En cambio, lo ejecutas así:

. script

De esta manera, los comandos del script son ejecutados por el shell actual como si estuvieran escritos en la terminal en lugar de ejecutarse a través de un script en un subshell. Los scripts pueden acceder a las variables locales de esta manera.

Creo que esa es una información suficientemente buena sobre subshell en Linux.

¿Lo entiendes mejor ahora o estás más confundido que nunca? Siéntete libre de expresarte en los comentarios como miembro de LHB.


Linux
  1. Cómo configurar su variable $PATH en Linux

  2. ¿Qué es un usuario de Linux?

  3. ¿Qué es Umask en Linux?

  4. ¿Por qué una variable es visible en una subcapa?

  5. UNIX/Linux:¿Qué es un shell? ¿Cuáles son las diferentes conchas?

Comando de exportación en Linux explicado

¿Qué es Login Shell en Linux?

¿Qué es Shebang en Linux Shell Scripting?

¿Qué es el promedio de carga en Linux?

¿Qué es el archivo .bashrc en Linux?

¿Qué es un archivo .sh?