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.

Trapaank
la source

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.

roadmr
la source
à 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.

André Stannek
la source
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.

Izzy
la source
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.

légendebb
la source
-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).

Pranit Bauva
la source
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