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


42

Jusqu'à la date où j'avais l'habitude de définir mes variables d'environnement dans le bash.bashrcfichier. Récemment, on m'a dit d'utiliser le /etc/environmentfichier. 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.bashrcapplique également des changements à l'échelle du système, je suppose. Corrigez-moi si je me trompe. Toute aide sera appréciée.

Réponses:


35

Une différence est qu’il /etc/environmentne contient que des définitions de variables 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 prévu something else.

Voir cette question .

À propos, la réponse que vous avez trouvée via Google semble faire référence à un utilisateur ~/.bashrcplutôt qu'à l'ensemble du système /etc/bash.bashrc. Cela peut causer votre confusion.


à quoi sert ~ / .bashrc quand deux fichiers font la même chose / etc / environment et /etc/bash.bashrc?
Trapaank

6
Le fichier /etc/bash.bashrc est exécuté si un utilisateur ouvre un bash. Le fichier ~ / .bashrc n'est exécuté que si le propriétaire du répertoire de base où il est enregistré ouvre une bash.
André Stannek

18

Le /etc/environmentfichier définit la variable à l'échelle du système pour chaque utilisateur au démarrage. Les commandes du fichier /etc/bash.bashrcsont exécutées si le bashshell est ouvert par un utilisateur. Ainsi, les variables ne seront pas définies à moins qu'un bashshell ne soit ouvert au moins une fois.


Désolé je suis novice à linux. whe bash shell sera ouvert? et une autre chose quand le shell bash est ouvert va-t-il remplacer la variable définie dans / etc / enviornment ou non?
Trapaank

Je ne sais pas quand le fichier / etc / environment est exécuté exactement, mais le fichier /etc/bash.bashrc est exécuté par Ubuntu lorsque vous entrez dans votre environnement de bureau. C'est pourquoi cela fonctionne si vous définissez les variables ici. Je suppose que le fichier / etc / environment est exécuté une fois au démarrage avant d’entrer dans le bureau et que l’exécution du fichier /etc/bash.bashrc écrase les variables. Mais encore une fois: je ne suis pas sûr de cela.
André Stannek

4
C'est lors de la connexion, pas de démarrage!
slm

6

Et quand vous parlez de " système à l'échelle ":

Les fichiers de configuration situés dans le /etcrépertoire s'appliquent à tous les utilisateurs du système. Car /etc/bash.bashrccela signifierait pour tous et pour tout ce qui utilise le "Borne Again SHell" aka Bash sur cette machine. Même si vous êtes le seul à l’utiliser, des "utilisateurs techniques" pourraient en être affectés (il suffit de jeter un coup d’œil à la /etc/passwdet de vérifier la fréquence à laquelle le terme "/ bin / bash" est indiqué - ou utilisé grep bash /etc/passwd | wc -l, ce qui devrait vous donner ce numéro directement (signifiant: "prend" toutes les lignes contenant la chaîne "bash" du fichier "/ etc / passwd", et envoie les résultats ("|") à la commande "wc" (nombre de mots) pour compter les lignes ("-l").

Donc, pour votre utilisateur, il est beaucoup plus sûr de modifier à la ~/.bashrcplace (c'est-à-dire le fichier ".bashrc" - avec un point, oui - dans votre répertoire personnel, par exemple /home/ankur/.bashrc), ce qui affecte alors votre utilisateur et laisse tout le reste . Les fichiers /etcentrants 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.bashrcest lu et "recherché" (ses paramètres s’appliquent à la session en cours), puis les utilisateurs /home/username/.bashrcsont gérés de la même manière, et peuvent donc ajouter ou même modifier / écraser les paramètres du système global. /etc/bash.bashrcfichier.


3

Au-delà de la discussion à l’échelle du système et des utilisateurs, une des différences les plus importantes /etc/environmentn’est pas un script autre que ~/.bashrc.

Vous ne pouvez pas déréférencer une variable à l'intérieur /etc/environment, son affectation de variable prenant littéralement la valeur de la ligne (comme déjà mentionné par roadmr).

Votre Ubuntu vous bloquera si vous bousillez l’ $PATHintérieur /etc/environmenten 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+ la F1console de connexion, à vérifier manuellement $PATHet à réparer le /etc/environmentfichier.

Selon cela , il /etc/environmentest chargé par la pile PAM, qui remplit les variables d’environnement ligne par ligne.


-1

La différence entre les deux réside dans le fait que le /etc/enivironmentfichier fonctionnera pour tous les utilisateurs tandis que le fichier bash.bashrc fonctionnera particulièrement pour cet utilisateur uniquement. Et si vous faites quelque chose de mal dans le /etc/environmentfichier, les conséquences peuvent être graves et vous pouvez facilement annuler les modifications apportées au fichier bash.bashrc en copiant le contenu du fichier / etc / environment. Mais la première préférence est donnée au bash.bashrcfichier puis au fichier / etc / environment. Ce n'est pas que si vous apportez des modifications au bash.bashrcfichier, le terminal donnera la préférence au fichier d'utilisateur local (c'est-à-dire bash.bashrc) et ensuite au fichier principal (c'est-à-dire /etc/environment).


Je pense que vous confondez les fichiers ~ / .bashrc et /etc/bash.bashrc. Le premier est local pour l'utilisateur ouvrant un shell, le second est global pour tous les utilisateurs ouvrant un shell.
Dennis
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.