2010-09-25 19 views
3

Quels scripts de démarrage, dans l'ordre dans lequel ils sont appelés, définissent la variable PATH lors de l'ouverture d'un shell BASH dans Terminal.app sous OS X?Comment la variable d'environnement PATH est-elle définie lors de l'ouverture d'un shell BASH dans Terminal.app sous OS X?

+0

variables d'environnement peuvent également être héritées dans ce contexte, j'imagine. Il pourrait être plus loin dans la chaîne de processus à moins d'être réinitialisé (pas simplement ajouté à). Mais le plus proche que je viens d'utiliser OS X est un MacBook mort assis sur une étagère. –

+0

Ce qui n'est pas totalement pertinent, mais peut-être utile, c'est que vous pouvez apporter une modification persistante au PATH vu par * toutes * les applications en utilisant une commande comme 'launchctl setenv PATH'. – rptb1

Répondre

7

J'ai trouvé le coupable. La sauce secrète était /usr/libexec/path_helper il regarde dans le fichier /etc/paths et dans le répertoire /etc/paths.d/.

Premières bash sources /etc/profile qui exécute le code suivant:

if [ -x /usr/libexec/path_helper ]; then 
    eval `/usr/libexec/path_helper -s` 
    # The above line is the secret sauce, so to say... 
    # First is adds default PATH values from the file /etc/paths 
    # Then all files in the /etc/paths.d/ directory are read and directories listed 
    # in each file (one per line) are appended to PATH 
fi 

if [ "${BASH-no}" != "no" ]; then 
    [ -r /etc/bashrc ] && . /etc/bashrc 
fi 

Suivant bash cherche des ~/.bash_profile, ~/.bash_login et ~/.profile.

Listing ces étapes sur, PATH est construit comme suit:

  1. répertoires dans le fichier /etc/paths sont ajoutés à PATH
  2. répertoires répertoriés dans les fichiers dans le répertoire /etc/paths.d/ sont en annexe-PATH - Note , que ceux-ci sont ajoutés au lieu d'être ajoutés.
  3. Divers PATH={DIR_2_ADD}:"${PATH}" déclarations dans mes dossiers ~/.bash_profile et ~/.bashrc sont PREPEND PATH