Où est définie la variable $ PATH à l'échelle du système?

10

J'utilise Ubuntu Desktop 14.04, et en tant que tel, j'utilise le shell sans connexion. Lorsque j'ouvre le terminal graphique, les sessions shell sans connexion lisent d'abord les fichiers de démarrage suivants:

/etc/bash.bashrc
~/.bashrc

Les shells sans connexion héritent de l'environnement du processus parent, qui est un shell de connexion, de sorte que la session lit également les fichiers de démarrage suivants:

/etc/profile
~/.bash_profile

Cependant, je ne peux pas trouver $PATHdes chemins de l' ensemble du système aiment /bin, /sbin, /usr/bin, /usr/sbin, situé dans l' un de ces fichiers. Où est l' $PATHensemble de ces répertoires?

Donato
la source

Réponses:

16

Le système (par défaut) à l'échelle du système PATHest défini dans le /etc/environmentfichier.

$ cat /etc/environment 
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"

C'est fondamentalement l'endroit pour enregistrer les variables d'environnement global.

heemayl
la source
+1, cependant savez-vous s'il $PATHest hérité par le shell de connexion parent ou s'il est rechargé par chaque bashinstance?
kos
@kos Tous les processus enfants héritent de l'environnement du shell parent, sauf s'ils sont bien sûr exécutés dans un environnement modifié.
heemayl
Je remarque que le shell ne semble pas étendre la $HOMEvariable. Par exemple, l'ajout $HOME/.composer/vendor/binà PATHin /etc/environmentne permet pas d'exécuter les binaires de ce répertoire sans préfixe de chemin. L'utilisation ~/.composer/vendor/binne fonctionne pas non plus. Je trouve qu'il est nécessaire d'ajouter le chemin absolu, par exemple: /home/vagrant/.composer/vendor/bin. Cela semble lié (mais n'explique pas ce comportement): askubuntu.com/questions/402353/…
Ben Johnson
2
@BenJohnson C'est simplement parce que /etc/environment(et ~/.pam/environment) est lu par le pam_envmodule PAM, pas le shell ou quoi que ce soit qui comprenne les variables shell / environnement; il en va de même pour l' ~expansion. Donc, vous devez y utiliser un chemin absolu.
heemayl