Jusqu'à la date où j'avais l'habitude de définir mes variables d'environnement dans le fichier bash.bashrc
. Récemment, on m'a dit d'utiliser le fichier /etc/environment
. Eh bien, les deux fonctionnent bien.
Alors, quelle est la différence entre eux?
J'ai googlé ceci et j'ai trouvé "bashrc est utilisé pour un utilisateur et un environnement particuliers, à l'échelle du système". Qu'entend-on par large du système ici? /etc/bash.bashrc
applique également des modifications à l'échelle du système, je suppose. Corrigez-moi si je me trompe. Toute aide sera appréciée.
Une différence est que /etc/environment
ne contient que des définitions de variable et ne semble pas subir d’expansion/interpolation de variable. Ainsi, vous ne pouvez pas faire référence à des variables dans les définitions. Cela ne fonctionnera pas par exemple:
A="else"
B="something $A"
B sera littéralement something $A
, pas le something else
attendu.
Voir cette question .
Soit dit en passant, la réponse trouvée via Google semble faire référence au ~/.bashrc
de l'utilisateur, plutôt qu'au /etc/bash.bashrc
du système. Cela peut causer votre confusion.
Le fichier /etc/environment
définit la variable pour l'ensemble du système pour chaque utilisateur au démarrage. Les commandes du /etc/bash.bashrc
are sont exécutées si le shell bash
est ouvert par un utilisateur. Ainsi, les variables ne seront pas définies à moins qu'un shell bash
soit ouvert au moins une fois.
Et comme vous le demandez à propos de "à l'échelle du système":
Les fichiers de configuration situés dans le répertoire /etc
s'appliquent à tous les utilisateurs du système. Pour /etc/bash.bashrc
, cela s’appliquerait à tous et à tous ceux qui utilisent le "Borne Again Shell", également appelé Bash, sur cette machine. Même si vous êtes le seul à l’utiliser, des "utilisateurs techniques" pourraient être concernés (il suffit de jeter un coup d’œil dans le /etc/passwd
et de vérifier la fréquence à laquelle le terme "/ bin/bash" est indiqué ici - ou d’utiliser le grep bash /etc/passwd | wc -l
, qui devrait vous donne directement ce numéro (ce qui signifie: "récupère" toutes les lignes contenant la chaîne "bash" du fichier "/ etc/passwd", et envoie les résultats ("|") à la commande "wc" (nombre de mots) à compter les lignes ("-l").
Donc, pour votre utilisateur, il est beaucoup plus sûr de modifier ~/.bashrc
à la place (c'est-à-dire le fichier ".bashrc" - avec un point, oui - dans votre répertoire personnel, par exemple /home/ankur/.bashrc
), ce qui affectera alors votre utilisateur et laissera tout sinon seul. Les fichiers de /etc
ne doivent être modifiés que si les modifications à l'échelle du système sont réellement voulues.
De plus, les deux configurations seront utilisées si elles existent. Tout d'abord, le fichier système (ici: /etc/bash.bashrc
) est lu et "obtenu" (ses paramètres sont appliqués à la session en cours), puis le /home/username/.bashrc
de l'utilisateur est traité de la même manière et peut donc être ajouté ou même modifié/remplacé par le fichier global /etc/bash.bashrc
.
Au-delà de la discussion à l'échelle du système et de l'utilisateur, la différence la plus significative est que /etc/environment
est et non un script autre que ~/.bashrc
.
Vous ne pouvez pas déréférencer la variable dans /etc/environment
, son affectation de variable qui prend littéralement la valeur de la ligne (comme déjà mentionné par roadmr).
Votre Ubuntu vous bloquera si vous bousillez le $PATH
dans /etc/environment
en essayant d’ajouter un nouveau chemin
PATH=$PATH:/new_path
Si votre page de connexion Ubuntu Gnome ou Unity n'a pas pu vous permettre d'entrer sans vous plaindre d'un mot de passe erroné. Et vous avez récemment modifié /etc/environment
, c'est très probablement le cas.
Un correctif consiste à se connecter à la console virtuelle CTRL+ALT+F1 console de connexion, cochez manuellement $PATH
et corrigez le fichier /etc/environment
.
Selon , ceci , /etc/environment
est chargé par la pile PAM, qui remplit la variable d'environnement ligne par ligne.