¿Dónde declarar variables de entorno?

59

¿Cuáles son los lugares correctos para:

  1. ¿Variables de entorno globales destinadas a afectar a todos los usuarios?
  2. Variables de entorno específicas del usuario?
Ivan
fuente

Respuestas:

16

Creo que la página wiki de la comunidad sobre variables de entorno te ayudará a resolver

sagarchalise
fuente
2
El problema es que el documento vinculado está confundido y / o simplemente mal en la parte de las variables específicas del usuario. Todavía estoy tratando de encontrar una forma agnóstica para hacerlo. $ HOME / .profile es probablemente la mejor apuesta ...
Rmano
16
Pegue el texto o tome una instantánea del contenido vinculado; es posible que no esté disponible en el futuro.
Nam G VU
44
Si bien esto puede responder teóricamente la pregunta, sería preferible incluir aquí las partes esenciales de la respuesta y proporcionar el enlace para referencia.
Thomas Ward
75

Para agregar a la respuesta de sagarchalise, puedo resumir lo que sugiere el enlace como lugares apropiados para la configuración.

Para configuraciones globales, variables de entorno de todo el sistema

  • Utilizar /etc/environment
  • No uses /etc/profileo/etc/bash.bashrc

De la página:

/etc/environment[...] está específicamente diseñado para configuraciones variables de entorno de todo el sistema. No es un archivo de script, sino que consiste en expresiones de asignación, una por línea. Específicamente, este archivo almacena la configuración regional y la configuración de ruta de todo el sistema.

Usar /etc/profilees un camino muy Unix-y, pero su funcionalidad se reduce en Ubuntu. Solo existe para apuntar /etc/bash.bashrcy recopilar entradas de /etc/profile.d.

En mi sistema, la única entrada de entrada interesante en profile.d es /etc/profile.d/bash_completion.sh.

Para configuraciones locales o por usuario

Se recomienda una versión anterior de la página de Ubuntu ~/.pam_environment, pero la página actualmente sugiere que si eso no funciona, debe usar

  • ~/.profile - Este es probablemente el mejor archivo para colocar asignaciones de variables de entorno, ya que el DisplayManager lo ejecuta automáticamente durante la sesión de escritorio del proceso de inicio, así como el shell de inicio de sesión cuando se inicia sesión desde la consola de texto.

  • ~/.bash_profileo ~./bash_login- Si existe uno de estos, bash lo ejecuta en lugar de ~/.profilecuando bash se inicia como un shell de inicio de sesión. Bash preferirá ~/.bash_profilea ~/.bash_login. [...] Estos archivos no influirán en una sesión gráfica de forma predeterminada ".

  • ~/.bashrc - "... puede ser el lugar más fácil para establecer variables".
belacqua
fuente
1
¿Qué programas leen /etc/environmenty cuándo? Parece que no funciona con cron, incluso cuando se usaSHELL=/bin/bash
SystemParadox
1
Parece que / etc / environment es parte de PAM, lo que significa que debería establecer el entorno predeterminado para todos los procesos. cron es especial (es decir, roto) al sobrescribir específicamente este entorno con el suyo.
SystemParadox
Entonces, ¿cómo se comporta .bashrc? después de bash_profile? en lugar de .profile?
abre el
1
@opensas Probablemente debería hacer una pregunta por separado, haciendo referencia a esta o la respuesta.
belacqua
@belacqua digamos que necesito agregar 2 o más variables de entorno que me /etc/environmentgusten JAVA_HOME="/opt/java" y ANT_HOME="/opt/ant" cómo hacerlo
Kasun Siyambalapitiya
7

Tienes:

/ etc / profile: archivo de perfil de todo el sistema para el shell Bourne (sh (1)) y shells compatibles con Bourne (bash (1), ksh (1), ash (1), ...).

que en Lucid y Maverick corren

/etc/profile.d/*.sh

si está presente, y si el shell del usuario es bash:

/etc/bash.bashrc

Para el entorno del usuario, existe una matriz confusa específica para el shell y si se considera un "shell de inicio de sesión". Si el shell es bash:

   ~/.bash_profile
          The personal initialization file, executed for login shells
   ~/.bashrc
          The individual per-interactive-shell startup file

para sh / dash:

$HOME/.profile

para zsh, ni siquiera voy a tratar de darle sentido a esto .

msw
fuente
5

Como se recomienda en https://help.ubuntu.com/community/EnvironmentVariables :

  1. Las variables de entorno global destinadas a afectar a todos los usuarios deben entrar /etc/environment.

  2. Se deben establecer variables de entorno específicas del usuario ~/.pam_environment.

Evite el perfil y los archivos rc para configurar variables de entorno en Ubuntu. Me han causado más dolores de cabeza de lo que valen.

Sin embargo, esto es más fácil decirlo que hacerlo;)

Es posible que se encuentre con la misma brecha de configuración que existía para mí. Vea la solución alternativa para el hogar encriptado a continuación.

Mi ~/.pam_environment:

PATH            DEFAULT=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:${HOME}/bin
IDEA_JDK        DEFAULT=${HOME}/Applications/jdk

¿Por qué el feo camino estático? ${PATH}No funcionaría para mí Bloqueé mi inicio de sesión varias veces tratando de solucionarlo, así que me quedo con la fea copia estática de los valores predeterminados :)

Solución alternativa para carpetas de inicio cifradas

En las versiones de Ubuntu hasta Precise 12.04 Beta 2, si está utilizando un directorio de inicio cifrado, deberá modificarlo /etc/pam.d/common-sessionpara que se cargue ~/.pam_environment. Aparentemente, esta solución funciona para versiones anteriores, pero no la he probado.

Guenther Montag (g-montag) escribió el 2010-08-19:

Esto parece ser un problema con los directorios principales cifrados. yo añadí

se requiere sesión pam_env.so

al final de /etc/pam.d/common-session y ahora se lee ~ / .pam_environment. En otro sistema sin directorios de inicio encriptados (también 10.04) no es necesario solucionar el problema. Quizás en mi caso el sistema intente leer ~ / .pam_environment antes de descifrarlo.

Adaptado de mi respuesta en Super Usuario: https://superuser.com/a/408373/66856

Alain O'Dea
fuente
Esto todavía está mal: ${HOME}tampoco funcionará. No hay expansión en .pam_environment.
detly
2
@detly hay expansión .pam_environment, pero HOMEgeneralmente no se establece tan temprano. Si esa línea hubiera leído DEFAULT=${PATH}/Applications/jdk, habría visto el valor de PATHinsertado en ella.
Muru