Recientemente descubrí /etc/environment
, que parece una forma más estándar de configurar variables de entorno simples que las secuencias de comandos, pero me preguntaba si había alguna forma de hacer una referencia inversa de 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"
Si trato de agregar $JAVA_HOME/bin
a la definición de PATH, sin embargo, obtengo $JAVA_HOME/bin, y no la variable interpolada. Para remediar esto, estoy creando environment.sh en profile.d para agregar /bin
entradas al camino, pero esto parece descuidado y desorganizado.
¿Hay alguna forma de hacer una referencia inversa de las variables de entorno en /etc/environment?
Mejor respuesta
El /etc/environment
el archivo es leído por pam_env
módulo PAM. Solo admite pares clave-valor simples, sin sustitución en el lado derecho.
Si desea generar valor con sustituciones u otras expansiones de shell, debe pasar por un shell. /etc/profile
(o un archivo en /etc/profile.d
) es el lugar adecuado para estos. Este es el lugar tradicional (/etc/environment
es una innovación relativamente reciente, en la historia de los sistemas Unix), y ciertamente no hay nada de descuidado en su uso. El principal beneficio de /etc/environment
es 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 de Bourne, pero esto no es común en la práctica.