web-dev-qa-db-fra.com

différence entre bash.bashrc et le fichier / etc / environment

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.

41
trapaank

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.

35
roadmr

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.

18
André Stannek

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.

6
Izzy

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.

3
legendbb