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


139

Je tape echo $PATHsur la ligne de commande et reçois

/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 car mon .bash_logindossier est vide.

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

Mise à jour: Merci à jtimberman pour la correction de ma echo $PATHdéclaration


5
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.
Sathyajith Bhat

@Sathya, cela me semble /etc/paths.dutile 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/pathsc'est une meilleure option.
haydenmuhl

J'ai créé un script principalement basé sur ce post, qui indique
Pedro Lopes

Réponses:


161

Lorsqu'il bashdémarre, il lit les fichiers suivants à chaque fois que vous vous connectez. Pour les besoins de OS X, cela signifie chaque fois que vous ouvrez une nouvelle Terminalfenê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 bashsur la ligne de commande, il lit.bashrc

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

Enfin, /etc/pathset /etc/paths.dsont également lus par le shell.


/opt/local/binetc. sont ajoutés ~/.tcshrcpar MacPorts. Veillez également à regarder dans ~/.cshrc.


5
Apparemment, ~/.MacOSX/environment.plistne fonctionne pas pour certaines personnes. Dans Modifier le chemin pour OS X, une alternative utilisant le dossier /etc/paths.dest décrite. Je n'ai pas testé ça.
Arjan

+1 pour ~/.cshrc. Je suis devenu fou en essayant de comprendre pourquoi cela ~/.profilene fonctionnait pas.
tomlogic

Je pense que cette réponse est incomplète. J'essaie de savoir où se trouve un chemin erroné (inexistant): / usr / bin / local, mon shell se plaint, et il ne se trouve dans aucun de ces fichiers.
Tommy

Je pense .bashrcest lu indépendamment de savoir si vous tapez bashou non.
Xiao Peng - ZenUML.com

48

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/binet rouvrez la fenêtre du terminal.


25

Sérieusement, Leopard nous a donné un nouveau moyen d'ajouter un chemin. Créez simplement un fichier contenant la partie du chemin que vous souhaitez ajouter, et placez-le dans /etc/paths.d

Voici un exemple rapide de cela:

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, toutes les parties de chemin dans les fichiers de ce répertoire seront ajoutées au chemin par défaut.

Cela fonctionne aussi pour manpath.

Voici un lien vers plus de détails:

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

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

Guide MacPorts


Très cool. Il ne reste plus qu'à obtenir que ces applications dépendantes du chemin ne polluent plus nos fichiers de profil ...
Daniel Beck

Aimer. Facile!
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.
Sathyajith Bhat

Une seule ligne, pas d’ajout aux fichiers et suppression facile. Aime ça. Merci leanne
Ibrahim Lawal

4

Pour montrer votre chemin, echo $ PATH.

echo $PATH

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


3

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

Comparez echo $PATHà ssh localhost 'echo $PATH'. Puisque ssh ne lit pas / etc / profile, / usr / libexec / path_helper ne s'exécute pas et donc / etc / path est ignoré. Maintenant essayer 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 voulez que votre chemin ssh soit similaire à votre chemin terminal normal, vous pouvez ajouter source /etc/profileà votre fichier .bashrc.


Merci pour l'allusion! Je cherchais exactement la solution avec ssh. svn + ssh n'a pas pu trouver la commande svnserve avec précision, car le chemin d'accès à svnserve se trouvait dans .profile, mais pas dans .bashrc.
KIR

2

Il pourrait être défini soit dans:

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

1

En réalité, il est stocké dans votre .profilefichier au lieu de .bash_loginet il est fréquent que MacPorts l'utilise au lieu du .bash_loginfichier.

Aussi Le /optrépertoire est généralement créé par MacPorts et stocke ses fichiers dans ce dossier.


1

En ce qui concerne docs for /usr/libexec/path_helperutility, les composants initiaux de $ PATH ont été extraits /etc/pathset ressemblent par défaut à

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

pour OS-X Snow Leopard

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.