Quelle est la différence entre «echo $ PATH» et / etc / chemins?

10

Je reçois quand j'echo $ PATH: Users/myusername/.node_modules_global/bin:/Users/mac/.node_modules_global/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/mac/Library/Android/sdk/platform-tools:/platform-tools.

Je souhaite supprimer certains chemins d'accès, mais lorsque j'ouvre le fichier à l'aide de la commande vim /etc/paths, j'obtiens les résultats suivants:

/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin

Le fichier / etc / chemins est-il différent de la variable $ PATH?

niveau0
la source
Quelle version d'OS X? Je n'ai pas /etc/pathsdans le mien, mais je cours 10.4.11et les choses ont probablement changé depuis
Fox
1
Mais selon une réponse sur AskDifferent , /etc/pathsest utilisé pour générer la valeur par défaut $PATH, que vous pourrez modifier ultérieurement
Fox
C'est la valeur par défaut. Au moment où l'utilisateur commence son shell, cependant, il serait modifié par d'autres fichiers qui ~/.bashrc~/.profile
shellent

Réponses:

14

/etc/pathsfait partie de ce qui est utilisé pour configurer les $PATHprocessus shell. Lorsque vous ouvrez une nouvelle fenêtre de terminal, celle-ci démarre bash, qui exécute plusieurs scripts de démarrage: /etc/profileET ~/.bash_profileOU (si cela n'existe pas) ~/.bash_loginOU (si cela n'existe pas non plus) ~/.profile. Ces scripts configurent l'environnement shell, notamment $PATH.

L'une des choses /etc/profileest exécutée /usr/libexec/path_helper, qui lit /etc/pathstous les fichiers /etc/paths.det y ajoute leur contenu $PATH. Mais ce n'est qu'un point de départ; votre propre script de démarrage (le cas échéant) peut s'ajouter $PATH, le modifier, le remplacer complètement, etc.

Il me semble que votre script de démarrage (et / ou ce qu'il exécute) ajoute un certain nombre d'entrées à l'ensemble de base dont il provient /etc/paths. "Users / myusername / .node_modules_global / bin: /Users/mac/.node_modules_global/bin:" est ajouté au début de $PATH(ce qui signifie que ces répertoires seront recherchés en premier), et ": / Users / mac / Library / Android / sdk / platform-tools: / platform-tools "est ajouté à la fin. Si vous voulez savoir exactement ce qui les ajoute, vous devez regarder votre script de démarrage.

BTW, ce processus de configuration $PATHs'applique uniquement aux shells bash "login". Tout ce qui est géré par un shell bash en héritera $PATH, donc a probablement essentiellement la même chose. Les shells sans connexion bash suivent un processus de configuration quelque peu différent. D'autres shells, et des choses qui n'ont pas démarré à partir d'un shell du tout (par exemple les tâches cron) peuvent avoir complètement différent $PATHs.

Gordon Davisson
la source
Notez que pour les shells sans connexion (par exemple /usr/local/bin/bashtel qu'installé par brew, sans l' -largument), /usr/libexec/path_helpern'est pas utilisé et /usr/local/binn'est pas inclus par défaut dans le $PATH. Pour utiliser path_helperdans un script ou de manière interactive, la commande est eval $(/usr/libexec/path_helper).
Kyle Strand
0

Les premiers endroits où je chercherais à vérifier les modifications sont,

~/.profile
~/.bashrc
~/.bash_profile

Si vous utilisez quelque chose qui n'est pas Bash, vérifiez les fichiers de configuration pour voir toute mention de PATH.

rovr138
la source