web-dev-qa-db-fra.com

Référencement des variables d'environnement * dans * / etc / environment?

J'ai récemment découvert /etc/environment, qui semble être un moyen plus standard de configurer des variables d'environnement simples que des scripts, mais je me demandais s'il existait un moyen de revenir en arrière des variables d'environnement dans le fichier/etc/environment.

C'est-à-dire que j'ai ceci:

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 j'essaie d'ajouter $Java_HOME/bin à la définition PATH, j'obtiens $ Java_HOME/bin et non la variable interpolée. Pour remédier à cela, je crée environment.sh dans profile.d pour ajouter les entrées /bin au chemin, mais cela semble négligé et désorganisé.

Existe-t-il un moyen de référencer les variables d'environnement dans/etc/environment?

19
Stefan Kendall

Le fichier /etc/environment est lu par le pam_env module PAM . Il ne prend en charge que des paires clé-valeur simples, sans substitution du côté droit.

Si vous souhaitez générer la valeur avec des substitutions ou d'autres extensions du shell, vous devez passer par un shell. /etc/profile (ou un fichier dans /etc/profile.d) est le bon endroit pour ceux-ci. C’est l’endroit traditionnel (/etc/environment est une innovation relativement récente, dans l’histoire des systèmes Unix), et son utilisation n’a rien de mal. Le principal avantage de /etc/environment est qu’il permet de définir des variables d’environnement même avec des méthodes de connexion n’impliquant pas de shell ni pour les utilisateurs utilisant un shell non-Bourne, mais elles ne sont pas courantes.

13
Gilles

La documentation Ubuntu donne à penser que cela semble impossible. MAIS, il y a une réponse.

ANSWER: Créez des variables d'environnement persistantes à l'échelle du système dans /etc/.bashrc

Java_HOME="/tools/Java"
...
PATH="$Java_HOME:$PATH"  

Détails:
Voici quelques détails supplémentaires issus de documentation sur les variables d'environnement .
La recommandation officielle est d'utiliser /etc/environment, comme vous l'avez essayé. Le problème est que ce fichier n'est pas un fichier de script. En d'autres termes, vous ne pouvez pas utiliser de variables dans les déclarations de variables.

La documentation continue avec 2 autres fichiers "non recommandés"
/etc/profile and /etc/bash.bashrc.

/etc/profile "n'invoque que le fichier /etc/bash.bashrc". Alors choisissez plutôt

/etc/bash.bashrc car "Ubuntu est configuré par défaut pour exécuter ce fichier chaque fois qu'un utilisateur entre dans un environnement Shell ou dans l'environnement de bureau."

2
csi