Référencer les variables d'environnement * dans * / etc / environment?

19

J'ai récemment découvert /etc/environment, ce qui semble être un moyen plus standard de configurer des variables d'environnement simples que des scripts, mais je me demandais s'il y avait un moyen de référencer les variables d'environnement dans le fichier / etc / environment.

Autrement dit, 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'essaye d'ajouter $JAVA_HOME/binà la définition de PATH, cependant, 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 /binentrées au chemin, mais cela semble bâclé et désorganisé.

Existe-t-il un moyen de faire référence aux variables d'environnement dans / etc / environment?

Stefan Kendall
la source

Réponses:

13

Le /etc/environmentfichier est lu par le pam_envmodule PAM . Il prend uniquement en charge les paires clé-valeur simples, sans substitution sur le côté droit.

Si vous souhaitez créer la valeur avec des substitutions ou d'autres extensions de shell, vous devez passer par un shell. /etc/profile(ou un fichier dans /etc/profile.d) est le bon endroit pour ces derniers. C'est l'endroit traditionnel ( /etc/environmentc'est une innovation relativement récente, dans l'histoire des systèmes Unix), et il n'y a certainement rien de bâclé à l'utiliser. Le principal avantage /etc/environmentest qu'il permet de définir des variables d'environnement même avec des méthodes de connexion qui n'impliquent pas de shell ou pour les utilisateurs qui utilisent un shell non Bourne, mais celles-ci ne sont pas courantes dans la pratique.

Gilles 'SO- arrête d'être méchant'
la source
Sans substitution, vous vous retrouvez avec beaucoup de licenciements /etc/environment, j'ai eu recours à /etc/profile, merci pour votre suggestion.
SAFX
2

La documentation Ubuntu rend cela impossible. MAIS, il y a une réponse.

REPONSE : 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 de la documentation des 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 se poursuit avec 2 autres fichiers "non recommandés"
/etc/profileet /etc/bash.bashrc.

/etc/profilemsgstr "ne fait guère plus qu'invoquer 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 shell ou dans l'environnement de bureau".

csi
la source
J'ai mis à jour EnvironmentVariables en consultation avec certains développeurs Ubuntu, donc ces déclarations "non recommandées" ne sont plus là.
Gunnar Hjalmarsson
msgstr "chaque fois qu'un utilisateur entre dans un shell". que dois-je faire quand il n'y a pas d'utilisateur pour entrer dans un shell? J'ai besoin de variables d'environnement pour mes utilisateurs automatisés qui exécutent un logiciel au démarrage. Par exemple, j'ai seulement 6 lignes de configuration proxy. Que dois-je en faire?
eis