Question Où $ PATH est-il défini dans OS X 10.6 Snow Leopard?


J'écris echo $PATH sur la ligne de commande et obtenez

/opt/local/bin:/opt/local/sbin:/Users/andrew/bin:/usr/local/bin:/usr/local/mysql/bin:/usr/local/pear/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin:/opt/local/bin:/usr/local/git/bin

Je me demande où cela se prépare depuis mon .bash_login le fichier est vide.

Je suis particulièrement préoccupé par le fait qu’après avoir installé MacPorts, il a installé un tas de /opt. Je ne pense pas que ce répertoire existe même dans une installation normale de Mac OS X.

Mettre à jour: Grâce à jtimberman pour corriger mon echo $PATH déclaration


132
2017-11-11 18:48


origine


commentaire de SMcCandlish:easiest solution when you want to make a site-wide path change (e.g. to include /usr/libexec or whatever) is to edit  /etc/paths  . While the new  /etc/paths.d/  thing is functional, it's actually more hassle than maintaining a single file. As others have hinted but not spelled out, if the path changes you want would be useful only for one user, it's best to make that change in the bash and/or tcsh config files in that user's home directory instead of system-wide. - Sathya♦
@Sathya, il me semble /etc/paths.d est utile pour les scripts d'installation. Si je veux que mon script d’installation ajoute le programme installé au chemin, je peux déposer un fichier dans /etc/paths.d. Si je veux modifier le chemin manuellement, /etc/paths est une meilleure option. - haydenmuhl
J'ai créé un script principalement basé sur ce post, qui imprime rapidement l'endroit où PATH est défini le long de ces différents emplacements: gist.github.com/lopespm/6407349952bc8a1ff8fb - Pedro Lopes


Réponses:


Quand bash commence il lit les fichiers suivants chaque fois que vous vous connectez. Pour OS X, cela signifie que chaque fois que vous ouvrez un nouveau Terminal fenêtre.

/etc/profile
~/.bash_profile
~/.bash_login   (if .bash_profile does not exist)
~/.profile      (if .bash_login does not exist)

Lorsque vous démarrez un nouveau shell en tapant bash sur la ligne de commande, il lit .bashrc

OS X utilise également ~/.MacOSX/environment.plist définir plus de variables d'environnement, y compris les chemins si nécessaire.

Finalement, /etc/paths et /etc/paths.d sont lus par le shell aussi.


/opt/local/bin etc. sont ajoutés dans ~/.tcshrc par MacPorts. Veillez également à regarder dans ~/.cshrc.


152
2017-11-11 20:57



Apparemment, ~/.MacOSX/environment.plist ne fonctionne pas pour certaines personnes. Dans Changer de chemin pour OS X une alternative en utilisant le dossier /etc/paths.d est décrit. Je n'ai pas testé ça. - Arjan
+1 pour ~/.cshrc. Je suis allé à essayer de comprendre pourquoi ~/.profile ne fonctionnait pas. - tomlogic
Je pense que cette réponse est incomplète. J'essaie de déterminer où un chemin erroné (inexistant): / usr / bin / local, mon shell se plaint, et il ne se trouve dans aucun de ces fichiers. - Tommy
je pense .bashrc est lu indépendamment si vous tapez bash ou pas. - Xiao Peng - ZenUML.com


Regardez le fichier /etc/paths, qui est utilisé par /usr/libexec/path_helper, qui est utilisé par /etc/profile.

Pour MacPorts, utilisez sudo /etc/paths/opt/local/bin et rouvrez la fenêtre du terminal.


47
2017-12-30 20:31





Sérieusement, Leopard nous a donné une nouvelle façon d’ajouter un chemin. Créez simplement un fichier contenant le chemin que vous souhaitez ajouter et placez-le dans /etc/paths.d

Voici un exemple rapide de cette opération:

echo "/some/path/to/add" >> /etc/paths.d/somefilename

Sinon, vous pouvez simplement aller dans /etc/paths.d et y placer le fichier directement. Dans les deux cas, les parties de chemin d'accès des fichiers de ce répertoire seront ajoutées au chemin par défaut.

Cela fonctionne également pour manpath.

Voici un lien vers plus de détails:

ars technica: comment ajouter quelque chose à PATH dans Snow Leopard?

Sur une deuxième note: MacPorts met tout dans le répertoire opt précisément parce qu'il n'est pas utilisé par Apple. De cette façon, cela ne sera pas en conflit. Leur guide (excellemment écrit, BTW) explique pourquoi il utilise opt et comment changer cette valeur par défaut si vous le souhaitez.

Guide MacPorts


25
2018-03-25 18:07



Très sympa. Il ne nous reste plus qu'à faire en sorte que ces applications dépendantes du chemin ne polluent plus nos fichiers de profil ... - Daniel Beck♦
Aimer. Simple! - Andrew Hedges
commentaire de SMcCandlish: I have to concur that there's nothing weird or bad about MacPorts using   /opt  (likewise Fink uses /sw); trying to replace stock Mac BSD parts with bleeding-edge builds from external projects like these is a recipe for an unusable system that requires an OS reinstallation. - Sathya♦
Ligne unique, pas d'ajout de fichiers et retrait facile. Aime ça. Merci leanne - Ibrahim Lawal


Pour afficher votre chemin, echo $ PATH.

echo $PATH

Pour définir votre chemin, éditez ~/.bash_profile, ne pas ~/.bash_login.


4
2017-11-11 19:07





Il y a aussi le chemin déterminé par ssh.

Comparer echo $PATH à ssh localhost 'echo $PATH'. Comme ssh ne lit pas / etc / profile, / usr / libexec / path_helper ne s'exécute pas et donc / etc / chemins est ignoré. Essayez maintenant ssh localhost 'source /etc/profile; echo $PATH'. Les chemins devraient être plus proches. Les différences restantes seront probablement dues à la modification du chemin dans votre fichier .bash_profile (qui est également ignoré par ssh) et à .bashrc (qui est lu par ssh).

Si vous souhaitez que votre chemin ssh soit similaire à votre chemin de terminal normal, vous pouvez ajouter source /etc/profile à votre .bashrc.


3
2018-02-07 19:36



Merci pour le conseil! Je cherchais exactement la solution avec ssh. svn + ssh ne pouvait pas trouver la commande svnserve exactement parce que le chemin d'accès à svnserve était dans .profile, mais n'était pas dans .bashrc. - KIR


Il pourrait être défini soit dans:

  • Variables système - /etc/paths
  • Variables utilisateur - voir l'explication de @Steve Folly

2
2018-06-01 09:50





En fait, il est stocké dans votre .profile fichier au lieu de .bash_login et il est fréquent que MacPorts l'utilise au lieu du .bash_login fichier.

Également /opt Le répertoire est généralement créé par MacPorts et stocke ses fichiers dans ce dossier.


1
2017-11-11 19:13





En ce qui concerne docs pour /usr/libexec/path_helper utilitaire, les composants initiaux pour $ PATH ont été pris de /etc/pathset par défaut ressemble à

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

pour OS-X Snow Leopard


1
2018-06-26 01:40