¿Hace referencia a variables de entorno * en * / etc / environment?

19

Recientemente descubrí /etc/environment, lo que parece una forma más estándar de configurar variables de entorno simples que los scripts, pero me preguntaba si había una forma de hacer referencia a las variables de entorno en el archivo / etc / environment.

Es decir, tengo esto:

JAVA_HOME="/tools/java"
GRAILS_HOME="/tools/grails"
GROOVY_HOME="/tools/groovy"
GRADLE_HOME="/tools/gradle"
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"

$JAVA_HOME/binSin embargo, si intento agregar a la definición de RUTA, obtengo $ JAVA_HOME / bin, y no la variable interpolada. Para remediar esto, estoy creando environment.sh en profile.d para agregar las /binentradas a la ruta, pero esto parece descuidado y desorganizado.

¿Hay alguna manera de hacer referencia a las variables de entorno en / etc / environment?

Stefan Kendall
fuente

Respuestas:

13

El /etc/environmentarchivo es leído por el pam_envmódulo PAM . Solo admite pares clave-valor simples, sin sustitución en el lado derecho.

Si desea construir el valor con sustituciones u otras expansiones de shell, debe pasar por un shell. /etc/profile(o un archivo /etc/profile.d) es el lugar adecuado para estos. Este es el lugar tradicional ( /etc/environmentes una innovación relativamente reciente, en la historia de los sistemas Unix), y ciertamente no hay nada descuidado en usarlo. El principal beneficio de /etc/environmentes que permite establecer variables de entorno incluso con métodos de inicio de sesión que no involucran un shell o para usuarios que usan un shell que no es Bourne, pero estos no son comunes en la práctica.

Gilles 'SO- deja de ser malvado'
fuente
Sin sustitución, terminas con muchas redundancias /etc/environment, recurrí /etc/profile, gracias por tu sugerencia.
SAFX
2

La documentación de Ubuntu hace que esto parezca imposible. Pero hay una respuesta.

RESPUESTA : Cree variables de entorno persistentes en todo el sistema en/etc/.bashrc

JAVA_HOME="/tools/java"
...
PATH="$JAVA_HOME:$PATH"  

Detalles:
Aquí hay más detalles de la documentación de Variables de entorno .
La recomendación oficial es usar /etc/environment, como lo ha intentado. El problema es que este archivo no es un archivo de script. En otras palabras, no puede usar variables en declaraciones de variables.

La documentación continúa con otros 2 archivos "No recomendados"
/etc/profiley /etc/bash.bashrc.

/etc/profile"hace poco más que invocar el archivo /etc/bash.bashrc". Entonces en lugar de elegir

/etc/bash.bashrc porque "Ubuntu está configurado de forma predeterminada para ejecutar este archivo cada vez que un usuario ingresa a un shell o al entorno de escritorio".

csi
fuente
He actualizado EnvironmentVariables en consulta con algunos desarrolladores de Ubuntu, por lo que esas declaraciones "no recomendadas" ya no existen.
Gunnar Hjalmarsson
"cada vez que un usuario ingresa a un shell". ¿Qué debo hacer cuando no hay ningún usuario para ingresar a un shell? Necesito variables de entorno para mis usuarios automatizados que ejecutan software en el inicio. Por ejemplo, solo tengo 6 líneas de configuración de proxy. ¿Que debo hacer con eso?
eis