Probar la Herencia de Variables y Alias en una Shell Hija
En este paso, explorarás cómo se comportan las variables y los alias cuando inicias una nueva shell desde la actual. Esta nueva shell se denomina "shell hija" y la shell original es la "shell padre". Este concepto es crucial para entender cómo se estructuran los entornos de shell y cómo se ejecutan los scripts. Probaremos si las variables flower y nut del paso anterior se transmiten, o se "heredan", por una shell hija.
Primero, identifiquemos el ID de Proceso (PID) de nuestra shell padre actual. Cada proceso en Linux tiene un PID único. Puedes verlo con el comando echo $$.
echo $$
La salida será un número, que es el PID de tu shell actual. Por ejemplo:
123
Ahora, inicia una shell hija simplemente escribiendo zsh y pulsando Enter. Esto crea un nuevo proceso de shell dentro del actual.
zsh
Ahora te encuentras en una nueva sesión de shell. Para confirmarlo, podemos usar el comando ps -f, que muestra información detallada de los procesos, incluido el ID del Proceso Padre (PPID).
ps -f
Observa la salida. Verás dos procesos zsh. El PID del nuevo proceso zsh debería tener un PPID que coincida con el PID de la shell padre que anotaste anteriormente.
UID PID PPID C STIME TTY TIME CMD
labex 123 1 0 10:00 pts/0 00:00:00 zsh
labex 456 123 0 10:01 pts/0 00:00:00 zsh
labex 457 456 0 10:01 pts/0 00:00:00 ps -f
En este ejemplo, la nueva shell (PID 456) es hija de la shell original (PPID 123).
Ahora, probemos las variables. En esta shell hija, intenta mostrar el valor de la variable local flower.
echo $flower
El comando no produce ninguna salida. Esto se debe a que las variables locales están limitadas a la shell en la que se crean y no son heredadas por las shells hijas.
A continuación, comprueba la variable de entorno nut.
echo $nut
Esta vez, la shell imprime el valor de la variable:
almond
Esto demuestra que las variables de entorno, a diferencia de las locales, son heredadas por las shells hijas.
Ahora, regresemos a la shell padre utilizando el comando exit.
exit
Ya estás de vuelta en tu shell original. Realicemos una prueba similar con un alias. Un alias es un atajo para un comando. Crea un alias llamado ldetc que ejecute ls -ld /etc.
alias ldetc='ls -ld /etc'
Verifica que el alias se haya creado escribiendo alias.
alias ldetc
Deberías ver la definición de tu alias:
ldetc='ls -ld /etc'
Ahora, prueba el alias ejecutándolo.
ldetc
El comando ejecutará ls -ld /etc y te mostrará los detalles del directorio /etc.
drwxr-xr-x 1 root root 4096 Oct 10 10:00 /etc
Ahora, abre otra shell hija para ver si el alias se hereda.
zsh
Dentro de la nueva shell hija, intenta usar el alias ldetc.
ldetc
Recibirás un mensaje de error, porque los alias, al igual que las variables locales, no son heredados por las shells hijas.
zsh: command not found: ldetc
Regresa a la shell padre.
exit
Finalmente, vamos a limpiar eliminando el alias de la shell padre con el comando unalias.
unalias ldetc
Verifica su eliminación intentando listarlo de nuevo.
alias ldetc
No se devuelve nada.
Este ejercicio te ha mostrado un principio clave del comportamiento de la shell: las variables de entorno son heredadas por los procesos hijos, pero las variables locales y los alias no lo son.