-->

Persistencia del PATH y Variables en Shell

Objetivo:

Aprender a hacer permanente la configuración de la variable PATH mediante el fichero de inicio .profile, y profundizar en el uso de variables en la shell: creación de variables propias, exportación para que estén disponibles en los scripts, y realización de operaciones aritméticas con ellas.

Escenario:

  • Herramientas: Terminal de Linux, editor vi, un script ejecutable creado en una sesión anterior (por ejemplo s1.sh dentro de un directorio scripts).
  • Conceptos clave: persistencia de variables de entorno, ficheros de inicio de sesión (.profile), recarga de un fichero de variables sin cerrar sesión, variables de sistema y variables de usuario, exportación de variables (export), operaciones aritméticas con expr, $(()) y let.

Instrucciones:

Fase 1: Comprobación de que el cambio de PATH no es permanente

  • Abre una nueva ventana de terminal (una nueva sesión distinta de aquella en la que modificaste el PATH anteriormente).
  • Intenta ejecutar tu script escribiendo solo su nombre:
  • s1.sh
  • Comprueba que Linux no lo encuentra y consulta el contenido actual del PATH:
  • echo $PATH
  • Verifica que el directorio de tus scripts ya no aparece en esta nueva sesión.

Fase 2: Edición del fichero de inicio .profile

  • Sitúate en tu directorio personal y abre el fichero de inicio con el editor:
  • cd ~
    vi .profile
  • Ve hasta el final del fichero, entra en modo edición y añade la siguiente línea (ajusta la ruta a tu usuario):
  • PATH=$PATH:/home/tu_usuario/scripts
  • Pulsa Esc y guarda los cambios saliendo con :x.

Fase 3: Recarga del fichero sin cerrar sesión

  • Prueba primero a ejecutar el fichero como un script normal:
  • ./.profile
  • Comprueba con echo $PATH que el cambio no se ha aplicado a tu sesión actual.
  • Ejecuta ahora el fichero utilizando el punto seguido de espacio, para que las variables se carguen en la sesión actual:
  • . ./.profile
  • Comprueba de nuevo el contenido del PATH:
  • echo $PATH
  • Verifica que ahora sí aparece el directorio de tus scripts.

Fase 4: Comprobación de la persistencia en una nueva sesión

  • Cambia a una sesión distinta en modo consola (por ejemplo con Ctrl + Alt + F3).
  • Inicia sesión con tu usuario y contraseña.
  • Consulta el contenido del PATH en esta nueva sesión:
  • echo $PATH
  • Ejecuta tu script escribiendo solo su nombre y comprueba que ahora funciona correctamente:
  • s1.sh
  • Regresa a tu entorno gráfico habitual.

Fase 5: Consulta de variables de entorno del sistema

  • Consulta el listado de variables de sistema y de usuario:
  • set | less
  • Consulta específicamente las variables de entorno:
  • env | less
  • Consulta el valor de dos variables de sistema conocidas:
  • echo $HOME
    echo $USER

Fase 6: Creación de variables propias

  • Crea una variable de texto y consulta su valor:
  • variable1="hola"
    echo $variable1
  • Crea una variable numérica y consulta su valor:
  • variable2=100
    echo $variable2

Fase 7: Uso de variables dentro de un script

  • Edita tu script s1.sh y añade una línea que muestre el valor de variable1:
  • echo $variable1
  • Guarda el script y, desde la terminal, cambia el valor de la variable:
  • variable1="hola a todos"
  • Ejecuta el script y observa que el nuevo valor no aparece.

Fase 8: Exportación de variables

  • Exporta la variable para que esté disponible también en los scripts que ejecutes desde esa sesión:
  • export variable1="hola a todos"
  • Ejecuta de nuevo tu script y comprueba que ahora sí aparece el valor actualizado.

Fase 9: Operaciones aritméticas con variables

  • Comprueba que Linux trata los números como texto por defecto:
  • echo 1+3
  • Crea dos variables numéricas:
  • v1=10
    v2=20
  • Realiza una suma utilizando el comando clásico expr:
  • expr $v1 + $v2
  • Realiza la misma suma utilizando la sintaxis moderna de doble paréntesis:
  • echo $((v1+v2))
  • Prueba también la resta, la multiplicación y la división con esta misma sintaxis, cambiando el operador.
  • Guarda el resultado de una operación en una nueva variable y consúltalo:
  • v3=$((v1+v2))
    echo $v3
  • Realiza una multiplicación utilizando la instrucción let:
  • let v3=v1*v2
    echo $v3

Preguntas de reflexión:

  1. ¿Por qué el cambio de PATH realizado directamente en la terminal deja de estar disponible al abrir una nueva sesión?
  2. ¿Qué función cumple el fichero .profile y en qué momento se ejecuta?
  3. ¿Qué diferencia existe entre ejecutar ./.profile y ejecutar . ./.profile?
  4. ¿Por qué al añadir la ruta al PATH dentro de .profile escribimos PATH=$PATH:ruta en lugar de sobrescribir la variable directamente?
  5. ¿Qué diferencia hay entre las variables de sistema y las variables creadas por el usuario?
  6. ¿Cómo se crea una variable propia y cómo se consulta su valor?
  7. ¿Por qué un script no ve el nuevo valor de una variable si esta no se ha exportado?
  8. ¿Qué hace el comando export?
  9. ¿Por qué echo 1+3 no realiza una suma, y qué alternativas existen para que Linux la interprete como una operación aritmética?
  10. ¿Qué ventaja ofrece let frente a la sintaxis de doble paréntesis para realizar operaciones aritméticas?
Haz clic aquí para ver las soluciones y explicaciones

1. ¿Por qué el cambio de PATH no persiste en una nueva sesión?

Porque al modificar la variable directamente en la terminal, el cambio solo se aplica a la memoria de esa sesión concreta. Al abrir una sesión nueva, el sistema vuelve a cargar los valores originales definidos en los ficheros de inicio, sin conservar los cambios manuales anteriores.


2. ¿Qué función cumple .profile?

Es uno de los ficheros de inicialización que se ejecutan al iniciar sesión, y permite definir de forma permanente variables de entorno y otras configuraciones que se aplicarán automáticamente cada vez que el usuario inicie sesión.


3. ¿Qué diferencia hay entre ./.profile y . ./.profile?

Ejecutar el fichero como un script normal (./.profile) lo procesa en un subproceso independiente, por lo que las variables definidas en él no se conservan en la sesión actual al finalizar. Ejecutarlo precedido de un punto y un espacio hace que las instrucciones se apliquen directamente sobre la sesión actual, conservando así las variables definidas.


4. ¿Por qué escribir PATH=$PATH:ruta en lugar de sobrescribir la variable?

Porque de ese modo se conserva el contenido previo de la variable, añadiendo la nueva ruta al final. Si se sobrescribiera directamente, se perderían todas las rutas anteriores necesarias para localizar otros programas del sistema.


5. ¿Qué diferencia hay entre variables de sistema y variables de usuario?

Las variables de sistema, que suelen escribirse en mayúsculas, existen de forma predefinida en el sistema operativo y aportan información como el directorio personal o el usuario actual. Las variables de usuario son creadas libremente por la persona que trabaja en la sesión, con el nombre y el valor que necesite.


6. ¿Cómo se crea una variable propia y cómo se consulta?

Se crea escribiendo el nombre de la variable seguido de un signo igual y el valor deseado, sin espacios alrededor del igual. Su valor se consulta anteponiendo el símbolo $ al nombre de la variable dentro de una instrucción como echo.


7. ¿Por qué un script no ve el nuevo valor de una variable sin exportarla?

Porque un script se ejecuta en un proceso independiente (un subshell), y por defecto solo hereda las variables que han sido explícitamente exportadas al entorno; las variables definidas solo en la sesión actual sin exportar no están disponibles para esos procesos hijos.


8. ¿Qué hace el comando export?

Marca una variable para que su valor esté disponible no solo en la sesión actual, sino también en los procesos y scripts que se ejecuten desde esa sesión.


9. ¿Por qué echo 1+3 no realiza una suma?

Porque por defecto la shell interpreta el contenido como una cadena de caracteres, no como una expresión matemática. Para que se interprete como una operación aritmética se pueden usar alternativas como el comando expr, la sintaxis de doble paréntesis $(()), o el comando let.


10. ¿Qué ventaja ofrece let frente al doble paréntesis?

let permite realizar la operación y asignar el resultado a una variable de forma más directa y sencilla, sin necesidad de escribir los símbolos $((...)) alrededor de la expresión.


Ficha de Laboratorio: Persistencia del PATH y Variables en Shell

Instrucciones de entrega:

  1. Rellena los campos y responde en este formulario desde tu navegador.
  2. Pulsa el botón de imprimir al final de la página.
  3. Selecciona "Guardar como PDF" en el diálogo de impresión.
  4. Entrega el archivo PDF en el aula virtual.

Alumno/a:      Fecha:      

Grupo:


Completa la ficha realizando las siguientes actividades:

  1. Edita el fichero .profile y añade tu directorio de scripts al PATH.
    Escribe el comando utilizado para abrir el fichero:

    Copia aquí la línea añadida:

    Explica para qué sirve este fichero:
  2. Recarga el fichero .profile en tu sesión actual y comprueba el cambio en el PATH.
    Escribe el comando utilizado para recargarlo:

    Copia aquí el contenido del PATH antes y después de recargarlo:

    Explica la diferencia entre esta forma de ejecutarlo y ejecutarlo como ./.profile:
  3. Comprueba que la configuración persiste en una nueva sesión distinta.
    Describe cómo accediste a la nueva sesión y qué comando usaste para comprobar el PATH:

    Indica si tu script se ejecutó correctamente en esa nueva sesión:
  4. Crea dos variables propias (una de texto y otra numérica) y consulta sus valores.
    Escribe los comandos utilizados para crear ambas variables:

    Copia aquí los valores obtenidos al consultarlas:
  5. Comprueba la diferencia entre usar una variable sin exportar y exportarla, dentro de un script.
    Escribe el comando utilizado para exportar la variable:

    Copia aquí la salida del script antes y después de exportar la variable:

    Explica por qué ocurre esta diferencia:
  6. Realiza una suma, una resta, una multiplicación y una división con dos variables numéricas, usando expr y la sintaxis de doble paréntesis.
    Escribe los comandos utilizados con expr:

    Escribe los comandos utilizados con doble paréntesis:

    Copia aquí los resultados obtenidos: