6 votes

Comment est construite ma variable $PATH sous MacOS ?

J'ai récemment installé Homebrew sur mon Mac et il se plaint que /usr/bin se produit avant /usr/local/bin dans mon $PATH ce qui signifie que les programmes fournis par le système seront utilisés au lieu de ceux installés avec Homebrew.

Mon .bashrc est configuré dans un ensemble de fichiers séparés, comme ceci Vidéo d'écran . Cela signifie que ~/.bash_profile ressemble à ça :

if [ -f ~/.bashrc ];
then
  source ~/.bashrc
fi

~/.bashrc ressemble à ça :

source ~/bin/dotfiles/bashrc

et ~/bin/dotfiles/bashrc ressemble à ça :

. ~/bin/dotfiles/bash/env
. ~/bin/dotfiles/bash/config
. ~/bin/dotfiles/bash/aliases

~/bin/dotfiles/bash/env qui est l'endroit où je place mon $PATH ressemble à ceci :

export EDITOR="kom"
export PATH=some/path/at/start:usr/local/bin:/Users/jim/pear/bin:~/bin:/Users/jim/.gem/ruby/1.8/bin:/Users/jim/bin/bashscripts:some/path/at/end:$PATH

J'ai ajouté some/path/at/start y some/path/at/end à des fins de débogage, puisque lorsque j'essaie de echo $PATH Je comprends :

/opt/local/bin:/opt/local/sbin:/Users/jim/bin:/opt/local/bin:/opt/local/sbin:some/path/at/start:usr/local/bin:/Users/jim/pear/bin:/Users/jim/bin:/Users/jim/.gem/ruby/1.8/bin:/Users/jim/bin/bashscripts:some/path/at/end:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin

En fait, il y a un tas d'autres choses qui sont chargées dans la variable $PATH et que je ne peux pas contrôler dans la configuration que j'ai décrite ci-dessus. Avez-vous une idée de l'endroit d'où ces choses sont chargées, afin que je puisse les modifier et déplacer les fichiers dans la variable $PATH ? /usr/local/bin avant /usr/bin ?

4voto

La section INVOCATION de la page de manuel bash indique que

Lorsque bash est invoqué en tant que shell de connexion interactif, ou en tant que shell non interactif avec l'option --login, il lit et exécute d'abord les commandes du fichier /etc/profile, si ce fichier existe. Après avoir lu ce fichier, il recherche ~/.bash_profile, ~/.bash_login et ~/.profile, dans cet ordre. ~/.profile, dans cet ordre, et lit et exécute les commandes de la première commande du premier qui existe et qui est lisible.

Les points suivants présentent un intérêt particulier /etc/profile qui utilise path_helper pour construire un chemin à partir de ce qu'il trouve dans /etc/paths y /etc/paths.d/* .

3voto

nohillside Points 82672

Si vous corrigez la faute de frappe dans votre affectation PATH et que vous remplacez usr/local/bin con /usr/local/bin Homebrew devrait arrêter de se plaindre.

Le reste ( /opt/local/... ) est définitivement ajouté quelque part plus tard au cours de l'initialisation du shell (c'est-à-dire après que source ~/.bashrc ou après . ~/bin/dotfiles/bash/env ). Il vous faudra parcourir les différents fichiers (ou chercher dans la base de données grep pour /opt/local ou PATH.*PATH ) pour voir où cela se produit (et pourquoi).

1voto

Preet Sangha Points 39414

Il y a aussi le système bashrc, qui se trouve dans /etc/bashrc, et quelques autres.

Desde man bash :-

FILES
       /bin/bash
              The bash executable
       /etc/profile
              The systemwide initialization file, executed for login shells
       ~/.bash_profile
              The personal initialization file, executed for login shells
       ~/.bashrc
              The individual per-interactive-shell startup file
       ~/.bash_logout
              The individual login shell cleanup file, executed when a login shell exits
       ~/.inputrc
              Individual readline initialization file

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X