¿Cómo se añaden las variables de entorno?

Estoy ejecutando Ubuntu 11.04. Yo uso la terminal para iniciar una sesión de bash, y quiero añadir una variable de entorno:

$r@hajt:~$ env THEVAR=/example

Pero no funciona. Muestra todas las variables con THEVAR siendo la última, pero otra llamada a env ya no muestra THEVAR - env | grep THEVAR no devuelve nada.

Igualmente, los scripts con exportación (export THEVAR=/ejemplo) u otras asignaciones de variables (THEVAR=/ejemplo) no añaden la variable de entorno.

Sé que estoy haciendo algo mal, sé que debería ser algo simple, pero no puedo encontrar qué.

ACTUALIZACIÓN: El verdadero sentido de mi pregunta era este: https://stackoverflow.com/questions/496702/can-a-shell-script-set-environment-variables-of-the-calling-shell

(De todos modos voy a elegir la respuesta más votada y dejar el título editado - que no era lo que estaba preguntando)

env ejecuta un programa en un entorno modificado, y luego descarta todos los cambios.

Solución

Para establecer la variable sólo para el shell actual:

VARNAME="my value"

Para establecerla para el shell actual y todos los procesos iniciados desde el shell actual:

export VARNAME="my value"      # shorter, less portable version

Para establecerlo permanentemente para todas las futuras sesiones de bash, añada esta línea a su archivo .bashrc en su directorio $HOME.

Para establecerlo permanentemente, y en todo el sistema (todos los usuarios, todos los procesos) añada la variable set en /etc/environment:

sudo -H gedit /etc/environment

Este archivo sólo acepta asignaciones de variables como

VARNAME="my value"

No utilice la palabra clave export aquí.

Es necesario cerrar la sesión del usuario actual y volver a iniciar la sesión para que se produzcan los cambios en las variables de entorno.

Comentarios (7)

Para establecer una variable de entorno una vez, utilice el comando export en el prompt, no en un script del shell:

$ export THEVAR=/example

La variable quedará establecida para el resto de la sesión del shell o hasta que se desactive.

Para establecer una variable de entorno cada vez, utilice el comando export en el archivo .bashrc (o el archivo de inicialización apropiado para su shell).

Para establecer una variable de entorno desde un script, utilice el comando export en el script, y luego source el script. Si ejecutas el script no funcionará.

Para una explicación de la diferencia entre el sourcing y la ejecución vea esta respuesta: https://superuser.com/questions/176783/what-is-the-difference-between-executing-a-bash-script-and-sourcing-a-bash-script/176788#176788

Comentarios (1)

Para añadir permanentemente una nueva variable de entorno en Ubuntu (probado sólo en 14.04), utilice los siguientes pasos:

  1. Abra un terminal (presionando CtrlAltT)
  2. sudo -H gedit /etc/environment
  3. Escriba su contraseña
  4. Edita el archivo de texto que acabas de abrir: por ejemplo, si quieres añadir FOO=bar, escribe FOO=bar en una nueva línea
    1. Guárdelo
  5. Una vez guardado, cierra la sesión y vuelve a entrar.
  6. Sus cambios requeridos están hechos.
Comentarios (5)