Est-il possible de savoir quels fichiers définissent / ajoutent aux variables d'environnement et leur ordre de priorité?

9

Certains de mes variables d'environnement ( $PATH, $MANPATHet amis) sont partiellement mis en place dans différents fichiers source.

Je me trouve souhaiter une commande ou une méthode pour recueillir rapidement quelle partie , dans une variable d'environnement spécifique, est venu de ce fichier .

Mon $ PATH, par exemple, a évidemment été défini (ajouté) dans .bashrc, /etc/paths, /etc/paths.d/X11... et je suis toujours à la recherche de ce dernier fichier mystérieux qui a créé une définition superfluously de chemin double dans mon $PATH.

Il faut un bon moment pour localiser manuellement les fichiers qui contribuent aux variables d'environnement. Il doit y avoir un moyen utile de contourner ce travail inutile de traçage de tous les colons… ou suis-je le seul à penser dans ce sens?

Henrik
la source

Réponses:

6

En règle générale PATHest fixé à une valeur initiale d'une manière très dépendante du système par le programme que vous dans les journaux ( pam_envest un contributeur commun), puis /etc/profileet ~/.profileles fichiers qu'ils comprennent continuer de modifier cette valeur.

Supprimez toute modification dans PATHin .bashrc, les paramètres d'environnement n'appartiennent pas à .bashrc: voir Différence entre .bashrc et .bash_profile .

Essayez d'abord de vous connecter en mode texte (par exemple avec ssh localhost), car le démarrage de la session est beaucoup plus simple qu'en mode graphique.

Mettez set -xau début de /etc/profileet ~/.profile. Le shell affichera une trace de ce qu'il fait sur son flux d'erreur standard; recherchez les affectations PATHdans la trace.

Il n'y a aucune notion de priorité aux affectations de variables d'environnement: celui qui attribue le dernier gagne.

Gilles 'SO- arrête d'être méchant'
la source
6

Votre CHEMIN peut être défini n'importe où, pas seulement dans votre fichier .bashrc. Votre système a très probablement un fichier /etc/profileet / ou /etc/profile.localqui définit un chemin par défaut pour tous les utilisateurs de votre système. Des modifications ou des ajouts spécifiques à l'utilisateur peuvent être définis dans votre .profilefichier s'ils ne le sont pas .bashrc, ou vous pouvez simplement utiliser la valeur par défaut sur votre système.

Si vous souhaitez apporter des modifications qui ne vous concernent que, je les mettrais dans votre .profileformulaire suivant:

export PATH=/new/directory:$PATH

éditant ainsi le chemin courant plutôt que de le réécrire entièrement.

La section "INVOCATION" de man bash(ou ici ) explique la différence entre .profileet .bashrc, et ainsi de suite, et quels autres fichiers et lire et dans quel ordre lorsque vous vous connectez ou démarrez un shell.

frabjous
la source
1

Il est très peu probable qu'il existe un mécanisme à cet effet. Pensez simplement au nombre de façons de modifier la valeur d'une variable env dans le shell.

Vous aurez peut-être de la chance set -x.

alex
la source