Vamos a ver cómo trabajar con las variables de entorno en Linux.
Una variable es un identificador o un nombre al que se le puede asignar un valor. Estos valores pueden ser leídos por el shell y otros comandos.
—> Asignamos un valor a una variable usando el nombre de la variable=valor
—> Importante recordar que las variables distinguen entre mayúsculas y minúsculas.
—> Al igual que los argumentos que se usan con los comandos en Linux, debemos usar las comillas simples o dobles cuando se incluyen caracteres especiales en el valor que asignamos a la variable.
En este artículo:
- ¿Qué son las Variables en Linux?
- Variables locales y Variables de entorno (Variables Globales)
- Mostrar todas las variables en Linux
- Mostrar solamente las variables de entorno
- Crear Variables locales
- Crear Variables de entorno
- Mostrar el valor de una variable
- ¿Cómo degradar/eliminar Variables?
- Hacer persistentes las Variables de entorno.
- La diferencia entre sesiones de inicio de sesión, no inicio de sesión, interactivas y no interactivas.
- Según sea un shell de Inicio de sesión o no inicio de sesión
- Según sea una sesión de Shell interactiva o no interactiva
- Otros ejemplos
- Comenzando a definir variables de entorno persistentes
- Definir Variables de entorno específicas de usuario
- Configurar las variables de entorno para un usuario por medio de su archivo .bashrc
- Configurar las variables de entorno para un usuario es por medio de su archivo .profile
- Pruebas: Archivo.bashrc vs archivo .profile
- Reiniciar las variables de entorno (Forzar la lectura de los archivos .bashrc o .profile del usuario)
Variables locales y variables de entorno
Podemos crear variables locales y variables de entorno.
- Las variables locales solo se usarán en el shell en el que fue creada.
- Las variables de entorno podrán usarse en otros programas o shells secundarios generados desde el shell actual.
Tradicionalmente (aunque no es una regla), se usan las minúsculas para las variables locales, y las mayúsculas para las variables de entorno.
Mostrar todas las variables en Linux
Hay varias formas de mostrar todas las variables en Linux.
Podemos mostrar todas las variables del sistema con el comando set.(mostraremos las variables locales y las variables de entorno)
- set : El comando set permite cambiar los valores de las opciones de shell, y establecer otros parámetros. Si no proporcionamos argumentos u opciones, el comando set muestra los nombres y valores de todas las variables y funciones de shell.
Mostrar solamente las variables de entorno
Tenemos varios comandos para mostrar solamente las variables de entorno:
- env : Solo mostrará una lista de variables que han sido exportadas (no mostrará todas las variables bash)
- declare -x : mostrar solamente las variables de entorno.
- typeset -x : mostrar solamente las variables de entorno.
- export -p : mostrar solamente las variables de entorno.
En la siguiente captura vemos el resultado que arrojará cualquiera de los anteriores comandos.
Y el resultado con printenv:
A excepción del comando env, que mostrará las variables de entorno sin “declare -x“:
Crear Variables locales
Podemos crear una variable local asignando un valor a una variable usando el nombre de la variable=valor.
por ejemplo:
VARIABLE1=HOLA1 |
Esta variable es local. Solo se podrá usar en el shell en el que fue creada. Si cambiamos de shell, o también si cambiamos de usuario, no la veremos ni podremos utilizarla.
Si quisiéramos convertir esta variable local en una variable del entorno, tendríamos que exportarla con el comando export, o declararla como variable de entorno, y hacer después que se cargue en los inicios de sesión de los usuarios. Vamos a verlo paso a paso.
Crear Variables de entorno (variables Globales)
Para crear variables de entorno en Linux, saremos los comandos:
- export
- declare
- typeset
Explicación y ejemplo sobre las Variables de entorno
—> Hemos creado previamente una variable local.
Ahora la exportamos para convertirla en variable de entorno, con el comando export:
export VARIABLE1=HOLA1 |
—> También podemos usar los comandos declare y typeset para declarar la variable como variable del entorno:
declare -x VARIABLE1=HOLA1 |
typeset -x VARIABLE1=HOLA1 |
Ver las variables de entorno creadas
Ahora para ver las últimas variables de entorno creadas, usamos:
env | grep VARIABLE |
y veremos que las nuevas variables aparecen:
Mostrar el valor de una variable con el comando echo
Para mostrar el valor de una variable, podemos usar el comando echo $nombre_de_la_variable
En este caso mostramos el valor de la variable con nombre “VARIABLE1”
echo $VARIABLE1 |
Cómo degradar y eliminar Variables
Si queremos que una Variable deje de ser una variable de entorno (degradar una variable de entorno a variable local), podríamos usar
export -n |
Explicación y Ejemplo de cómo degradar Variables
PASOS PREVIOS: Crear una variable y convertirla en variable de entorno
Primero creamos una variable LOCAL:
VARIABLE3=HOLA3 |
Al ser una variable local, el comando printenv NO la muestra
printenv | grep VAR |
Sin embargo, el comando set (que muestra todas las variables, LOCALES y de entorno o GLOBALES), SÍ la muestra:
set | grep VAR VARIABLE3=HOLA3 |
Ahora exportamos la variable LOCAL y la convertimos en variable de entorno.
Entonces, tanto el comando printenv como el comando set, mostrarán la variable (que ya es de entorno, o GLOBAL):
Cómo degradar una variable de entorno
Degradamos la variable de entorno con export -n
Al haber ejecutado export -n, la variable ya no es una variable de entorno, sino una variable local.
Vemos que con el comando printenv ya no aparece (printenv muestra todas las variables de entorno, no las locales), pero con set aún aparece por ser variable LOCAL.
Cómo eliminar una Variable
El siguiente paso es eliminar la variable.
Podemos hacerlo modificando el valor de la variable e igualándolo a nada,
o
con el comando unset:
unset VARIABLE3 |
o
VARIABLE3= |
y vemos que la variable VARIABLE3 ya no aparece.
Hemos visto cómo crear variables de entorno, pero si no las hacemos persistentes, cuando cerremos la sesión actual ya no existirán en el sistema.
Así que vamos a ver cómo configurar las variables de entorno para que aparezcan en cada inicio de sesión. Pacece fácil, pero debido a los diferentes tipos de inicio de sesión que existen, tendremos que configurar las variables en diversos archivos (dependiendo del inicio de sesión y del sistema en el que nos encontremos).
La diferencia entre sesiones de inicio de sesión, no inicio de sesión, interactivas y no interactivas
Dependiendo de la forma en que se inicie sesión, el shell bash lee unos archivos u otros.
Veamos las diferentes inicios de sesión existentes.
Según sea un shell de Inicio de sesión o no inicio de sesión
- Shell de Inicio de sesión: Una sesión de shell que comienza autenticando al usuario para entrar al sistema. Ejemplo: Iniciar sesión en una terminal o mediante SSH (siempre que se nos pida realizar la autenticación de usuario).
- Shell sin inicio de sesión: Una sesión de shell que comienza sin tener que entrar al sistema (ya estamos dentro). Ejemplo: cuando llamamos a una nueva sesión de shell desde una sesión de shell en la que ya estábamos autenticados (podemos hacerlo con el comando bash); la nueva sesión de shell “hija” se iniciará sin pedirnos autenticación.
Según sea una sesión de Shell interactiva o no interactiva
- Sesión de shell interactiva: una sesión de shell conectada a una sesión de terminal.
- Sesión de shell NO interactiva: una sesión de shell NO conectada a un terminal.
Otros ejemplos
- Un script lanzado desde la linea de comandos normalmente se ejecuta en un shell NO interactivo y sin inicio de sesión.
- Una sesión de terminal puede ser cualquier combinación de las propiedades comentadas (Inicio de sesión / No inicio de sesión , Interactiva / No interactiva).
Comenzando a definir variables de entorno persistentes
—> Podemos hacer persistentes las variables de entorno para un usuario o para todo el sistema.
Por norma general se suelen definir variables de entorno como variables específicas del usuario. En este caso se configuraría preferiblemente el archivo ~/.bashrc del usuario; vamos a verlo.
Definir Variables de entorno específicas de usuario
Declaramos la variable de entorno en alguno de estos archivos del usuario:
;
- /home/usuario/.bashrc
- o en /home/usuario/.profile
así, como de costumbre:
export VARIABLE="valor" |
La diferencia entre estos dos archivos
- Archivo .bashrc:
Es ejecutado por bash para los shells de NO inicio de sesión (se ejecutará aunque el usuario no inicie sesión)
# ~/.bashrc: executed by bash(1) for non-login shells.
# If not running interactively, don’t do anything
- Archivo .profile
Ejecutado por el interprete de comandos para shells de inicio de sesión (solo se ejecutará cuando el usuario inicie sesión).
# ~/.profile: executed by the command interpreter for login shells.
# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
# exists.
Configurar las variables de entorno para un usuario por medio de su archivo .bashrc
Editamos el archivo .bashrc del usuario y añadimos la nueva variable de la misma forma que lo haríamos por medio de la terminal:
export nombre_variable=valor |
por ejemplo:
export VAR5=HOLA5 |
Configurar las variables de entorno para un usuario es por medio de su archivo .profile
Editamos el archivo .profile del usuario y añadimos la nueva variable de la misma forma que lo haríamos por medio de la terminal:
export nombre_variable=valor |
por ejemplo:
export VAR6=HOLA6 |
Pruebas: Archivo .bashrc vs archivo .profile
Hemos definido dos variables para el usuario “test“. Ahora, con la sesión del usuario cerrada, iniciamos sesión con otro usuario, y después nos autenticamos como el usuario “test“.
Entonces procedemos a mostrar las variables creadas, y comprobamos que la variable creada en el archivo .bashrc del usuario sí que se puede mostrar.
Sin embargo la variable creada en el archivo .profile no aparece:
EXPLICACIÓN
- Tal y como hemos comentado anteriormente, la variable definida en el archivo .bashrc aparece porque dicho archivo se ejecutará aunque el usuario no inicie sesión (como en este caso, en el que otro usuario había iniciado sesión.)
- Por la misma razón, la variable definida en el archivo .profile NO aparece ya que dicho archivo solo se ejecutará cuando el usuario inicie sesión (y este no es el caso).
Reiniciar las variables de entorno en Linux (Forzar la lectura de los archivos .bashrc o .profile del usuario)
Podemos forzar la lectura de estos archivos para cargarlos de nuevo, por medio del comando .source:
source .bashrc source .profile |
Definir Variables de entorno para todo el sistema
Si necesitamos establecer variables de entorno para todos los usuarios del sistema, lo podemos hacer añadiendo las variables a cualquiera de estos archivos:
- /etc/profile
- /etc/bash.bashrc
- /etc/environment
Preferiblemente usaremos el archivo /etc/environment
Al definir variables en este archivo no es necesario utilizar la sintaxis
export nombre_variable=valor |
sino que simplemente usaremos:
nombre_variable=valor |
Para comprobar que funciona, cerramos la sesión del usuario actual y la iniciamos nuevamente.
Y comprobamos si aparecen las nuevas variables definidas:
—> Más INFO sobre Variables de entorno en Linux.
Estas han sido algunas de las nociones, operaciones básicas y ejemplos de variables de entorno en Linux.
Si ha sido útil puedes dejar tus comentarios.