¿Cómo agrego variables de entorno?

365

Estoy ejecutando Ubuntu 11.04. Utilizo el terminal para iniciar una sesión bash, y quiero agregar una variable de entorno:

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

Pero no está funcionando. Muestra todas las variables con Thevar siendo el último, pero otra llamada a envno muestra THEVARmás- env | grep THEVARvuelve nada.

Del mismo modo, los scripts con export ( export THEVAR=/example) u otras asignaciones de variables ( THEVAR=/example) no agregan 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 significado de mi pregunta fue esta: https://stackoverflow.com/questions/496702/can-a-shell-script-set-environment-variables-of-the-calling-shell

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

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

Suspiro
fuente
1
Cuando se define / exporta en .bashrc, funciona correctamente.
huff
1
¿Qué tal THEVAR=/example?
Oleh Prypin
2
El otro es sobre variables globales, este no agrega tal limitación. Lo mantendría separado.
Lekensteyn

Respuestas:

571

Para establecer la variable solo para el shell actual:

VARNAME="my value"

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

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

Para configurarlo permanentemente para todas las futuras sesiones de bash, agregue dicha línea a su .bashrcarchivo en su $HOMEdirectorio.

Para configurarlo de forma permanente y en todo el sistema (todos los usuarios, todos los procesos) agregue la variable de conjunto en / etc / environment:

sudo -H gedit /etc/environment

Este archivo solo acepta asignaciones variables como:

VARNAME="my value"

No use la exportpalabra clave aquí.

Debe cerrar sesión del usuario actual e iniciar sesión nuevamente para que se produzcan cambios en las variables de entorno.

Michał Šrajer
fuente
29
Shell config files such as ~/.bashrc, ~/.bash_profile, and ~/.bash_login are often suggested for setting environment variables. While this may work on Bash shells for programs started from the shell, variables set in those files are not available by default to programs started from the graphical environment in a desktop session. help.ubuntu.com/community/EnvironmentVariables
SudoSURoot
1
@ Mr.Hyde sí, ese es probablemente un lugar razonable
Michał Šrajer
1
@BharadwajRaju porque en algunos sistemas UNIX antiguos se puede exportar solo una variable que ya está configurada. Old Solaris y HP-UX, por ejemplo.
Michał Šrajer
1
Una vez que establezca la variable de entorno, ¿cómo puedo verla rápidamente para asegurarme de que está configurada?
Rod
1
@Rodecho $myvar
Qwerty
29

Para establecer una variable de entorno una vez, use el exportcomando en el indicador, no en un script de shell:

$ export THEVAR=/example

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

Para establecer una variable de entorno cada vez, use el exportcomando en el .bashrcarchivo (o el archivo de inicialización apropiado para su shell).

Para establecer una variable de entorno a partir de un script, use el exportcomando en el script y luego sourceel script. Si ejecuta el script, no funcionará.

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

lesmana
fuente
44
¿Cómo puedo hacer que funcione solo ejecutando el script? Sin abastecimiento.
Mithril
19

Para agregar permanentemente una nueva variable de entorno en Ubuntu (probado solo en 14.04), utilice los siguientes pasos:

  1. Abra una terminal (presionando CtrlAltT)
  2. sudo -H gedit /etc/environment
  3. Escribe tu contraseña
  4. Edite el archivo de texto que acaba de abrir:
    por ejemplo, si desea agregar FOO=bar, simplemente escriba FOO=baren una nueva línea
  5. Guardarlo
  6. Una vez guardado, cierre sesión y vuelva a iniciar sesión.
  7. Se realizan los cambios requeridos.
usuario355501
fuente
55
He limpiado su respuesta eliminando los bits más peligrosos sobre sudo gedit(Ver askubuntu.com/questions/270006/… ) y chmod 777. Esto último nunca debe hacerse en un archivo de configuración del sistema.
muru
Esta es una respuesta correcta para ciertos casos. Todas las sesiones, ya sean sesiones de shell de usuario o no, obtendrán el valor de las variables establecidas aquí. Es importante tener en cuenta que si bien esto puede parecer un script de shell, no lo es, solo le permite establecer variables de entorno (en comparación con el uso de funciones de shell como ifo test)
Tom Harrison Jr
Si la barra es una cadena, ¿debo ponerla entre comillas? Al igual que Foo="bar"?
blue_chip
@blue_chip No, funciona sin comillas.
Haga clic en Upvote
44
@blue_chip para variables de entorno, todo es una cadena. Solo necesita comillas cuando contiene espacios.
Ruslan
8

Para que los cambios en el entorno / var persistan después de que se haya completado el script, debe usar source ./script.shla notación abreviada para la fuente, ".", Como. ./script.sh

Source ejecutará los comandos en el script como si los hubiera escrito ... así que cambia algunos aspectos del script, como salir ... así que si su script verifica algo y decide salir si es falso, por ejemplo, mediante una llamada exit 0, terminará su sesión actual de terminal / shell.

m0bl
fuente
Esta es una pregunta muy antigua que ya tiene una respuesta aceptada y algunas otras ... Considere responder las preguntas más recientes, por favor ...
NerdOfCode
3
@NerdOfCode esta respuesta aborda un problema que aún es relevante y ninguna de las otras respuestas, incluida la aceptada, lo menciona, por lo que puedo ver ... De hecho, hay dos insignias disponibles para proporcionar buenas respuestas a viejas preguntas, así que esto es alentador
Zanna
1
Esto es exactamente lo que estaba buscando. Necesitaba ver fuera del guión, las variables exportadas desde el guión.
Alban
5

Si está haciendo cosas a través de un script, una forma fácil de configurar la variable de entorno de forma permanente se encuentra debajo de la declaración en su script,

if [[ ! -d "$MyVar" ]]; then 
    export MyVar="abc"
    echo 'export MyVar="abc"' >> ~/.bashrc
fi

Si necesita evaluar expresiones como pwd, puede usar esto, por ejemplo,

echo "export EIGEN_ROOT=\"$(pwd)/eigen\"" >> ~/.bashrc
Shital Shah
fuente
1

Sé que es bastante tarde, pero si desea agregar una variable de entorno para todos los usuarios (por ejemplo, uso de JAVA), puede hacer lo siguiente:

1) Abra /etc/bash.bashrcusando nano (puede usar cualquier editor, no prefiero VIM ya que es lo peor cuando se trata de facilidad de uso, nada personal).

2) Añadir al archivo:

export VAR=path export PATH=$PATH:/bin 3) (Mejor si puede rebotar la caja) - o simplemente abra una nueva sesión SSH y confirme con el comando `env '.

PERO SI desea que cada usuario tenga una configuración separada para esto, debe realizar un cambio (con secuencia de comandos) en el .bashrcarchivo ~/.bashrc(o /home/$USER/si es nuevo en sistemas Linux)

ha9u63ar
fuente