web-dev-qa-db-fra.com

Où déclarer les variables d'environnement?

Quels sont les bons endroits pour:

  1. Des variables d'environnement globales censées affecter tous les utilisateurs?
  2. Variables d'environnement spécifiques à l'utilisateur?
59
Ivan
16
sagarchalise

Pour ajouter à la réponse de sagarchalise, je peux résumer ce que le lien suggère comme lieux appropriés pour les paramètres.

Pour les paramètres globaux, variables d'environnement à l'échelle du système

  • Utilisez /etc/environment
  • N'utilisez pas /etc/profile ou /etc/bash.bashrc

De la page:

/etc/environment [...] est spécifiquement conçu pour les paramètres de variable d'environnement à l'échelle du système. Ce n'est pas un fichier de script, mais plutôt une expression d'affectation, une par ligne. Plus précisément, ce fichier stocke les paramètres régionaux et de chemin d'accès à l'échelle du système.

Utiliser /etc/profile est une méthode très Unix-y, mais ses fonctionnalités sont considérablement réduites sous Ubuntu. Il existe uniquement pour pointer sur /etc/bash.bashrc et pour collecter les entrées à partir de /etc/profile.d.

Sur mon système, la seule entrée intéressante dans profile.d est /etc/profile.d/bash_completion.sh.

Pour les paramètres locaux ou par utilisateur

Une version précédente de la page Ubuntu recommandait ~/.pam_environment, mais la page suggère actuellement que si cela ne fonctionne pas, vous devez utiliser

  • ~/.profile - C'est probablement le meilleur fichier pour placer des assignations de variable d'environnement, car il est exécuté automatiquement par DisplayManager lors de la session de bureau du processus de démarrage ainsi que par le shell de connexion lors de la connexion à partir de la console textuelle.

  • ~/.bash_profile ou ~./bash_login - Si l'un de ces éléments existe, bash l'exécute au lieu de ~/.profile lorsque bash est démarré en tant que shell de connexion. Bash préférera ~/.bash_profile à ~/.bash_login. [...] Ces fichiers n'influenceront pas une session graphique par défaut. "

  • ~/.bashrc - "... peut être l'endroit le plus facile pour définir des variables".
75
belacqua

Tu as:

/ etc/profile: fichier .profile à l'échelle du système pour les shells compatibles Bourne Shell (sh (1)) et Bourne (bash (1), ksh (1), cendres (1), ...).

qui dans Lucid et Maverick courir

/etc/profile.d/*.sh

si présent, et si le shell de l'utilisateur est bash:

/etc/bash.bashrc

Pour l’environnement utilisateur, il existe un tableau déroutant spécifique au shell et indiquant s’il est considéré ou non comme un "shell de connexion". Si le shell est bash:

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

pour sh/dash:

$HOME/.profile

pour zsh, je ne vais même pas essayer pour donner un sens à cela .

7
msw

Comme recommandé sur https://help.ubuntu.com/community/EnvironmentVariables :

  1. Les variables d'environnement globales destinées à affecter tous les utilisateurs doivent être insérées dans /etc/environment.

  2. Les variables d'environnement spécifiques à l'utilisateur doivent être définies dans ~/.pam_environment.

Évitez les fichiers profile et rc pour la définition de variables d’environnement sur Ubuntu. Ils m'ont causé plus de maux de tête que ce qu'ils valent.

C'est plus facile à dire qu'à faire cependant;)

Il est possible que vous rencontriez le même problème de configuration que celui qui existait pour moi. Voir la solution de contournement pour la maison cryptée ci-dessous.

Mon ~/.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

Pourquoi le chemin statique laide? ${PATH} ne fonctionnerait pas pour moi. J'ai bricolé mon identifiant plusieurs fois en essayant de le contourner, donc je m'en tiens à la copie statique laide des valeurs par défaut :)

Solution de contournement pour les dossiers de départ cryptés

Dans les versions Ubuntu jusqu’à Precise 12.04 Beta 2 incluse, si vous utilisez un répertoire personnel chiffré, vous devez modifier /etc/pam.d/common-session pour le charger ~/.pam_environment. Cette solution fonctionne apparemment pour les versions précédentes, mais je ne l’ai pas testée.

Guenther Montag (g-montag) a écrit le 2010-08-19:

Cela semble être un problème avec les répertoires de départ cryptés. J'ai ajouté

session requise pam_env.so

à la fin de /etc/pam.d/common-session et maintenant ~/.pam_environment est lu. Sur un autre système sans répertoires personnels cryptés (également 10.04), la solution de contournement n’est pas nécessaire. Peut-être que dans mon cas, le système essaiera de lire ~/.pam_environment avant qu'il ne soit déchiffré.

Adapté de ma réponse au super utilisateur: https://superuser.com/a/408373/66856

5
Alain O'Dea