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?


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.


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.

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.