0 votes

Faire en sorte que les éléments ajoutés aux chemins via paths.d apparaissent partout sous Mavericks

Je voudrais définir le chemin sous OS X Mavericks afin que le réglage s'affiche partout (par exemple, dans .apps et dans les coquilles Darwin). Il y a beaucoup de discussions sur la façon de définir des variables d'environnement de manière générale sous OS X. Avec environments.plist n'est plus pris en charge par Mavericks, il semble que éditer /etc/launchd.conf soit la meilleure option pour le faire. Malheureusement, launchd.conf ne semble pas prendre en charge l'expansion des paramètres, donc je ne peux pas faire ceci :

setenv PATH /Users/kuzzooroo/anaconda/bin:$PATH

et je ne veux pas coder en dur tout mon chemin - cela semble difficile à maintenir.

Il y a une autre question dans AskDifferent spécifiquement sur définir la variable d'environnement PATH de tout le système dans Mavericks. La solution acceptée est d'utiliser /etc/paths.d/, mais quelqu'un a posté le commentaire suivant (qui a reçu plusieurs votes positifs) en guise de mise en garde :

Les chemins dans paths.d sont ajoutés au chemin par path_helper, qui est exécuté depuis /etc/profile et /etc/csh.login, mais pas lorsque par exemple bash est invoqué en tant que shell non interactif ou non de connexion ou lorsque vous exécutez des programmes dans des éditeurs de texte.

Y a-t-il un moyen de faire en sorte que ces environnements intègrent paths.d (par exemple, en mettant une commande pour traiter paths.d dans un fichier de configuration bash qui est exécuté même pour les shells non interactifs) ?

0voto

Fuzzy Purple Monkey Points 702

Option 1 : utilisez simplement /etc/launchd.conf

Ajoutez une ligne comme

setenv PATH /Users/username/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

dans /etc/launchd.conf et redémarrez pour appliquer les changements.

Le chemin par défaut est /usr/bin:/bin:/usr/sbin:/sbin.

/etc/launchd.conf s'applique à tous les processus, ce qui inclut les applications graphiques, les shells non ouverts et les programmes lancés par les jobs de launchd.

Modifiez /etc/launchd.conf manuellement si vous voyez qu'un programme ou un installateur a ajouté de nouveaux chemins à /etc/paths ou /etc/paths.d/*.

Option 2 : utilisez un job launchd pour définir le chemin lors du démarrage

Enregistrez ce fichier plist sous le nom /Library/LaunchDaemons/setpath.plist:

  Label
  setpath
  ProgramArguments

    bash
    -c
    launchctl setenv PATH "$((launchctl getenv PATH|tr : \\n
    cat /etc/paths /etc/paths.d/*)|awk '!a[$0]++'|paste -sd: -)"

  RunAtLoad

Le programme devrait être exécuté la prochaine fois que vous redémarrez. Il modifie le PATH du processus launchd racine, qui est hérité par le processus launchd utilisateur.

À mon avis, il est plus facile de simplement éditer /etc/launchd.conf.

Option 3 : faites en sorte que bash exécute path_helper même pour les shells non ouverts

path_helper est exécuté à partir de /etc/profile, /etc/zshenv, et /etc/csh.login. zsh lit /etc/zshenv même pour les shells non ouverts mais bash ne lit pas /etc/profile pour les shells non ouverts.

Cela fait en sorte que bash exécute path_helper pour les shells non ouverts interactifs et pour les shells non ouverts non interactifs :

echo 'eval $(/usr/libexec/path_helper -s)'>>~/.bashrc
setenv BASH_ENV /etc/profile|sudo tee -a /etc/launchd.conf

Cela ne fait pas en sorte que bash exécute path_helper pour les shells non ouverts non interactifs invoqués en tant que sh. Cela n'affecte pas non plus les applications graphiques ou les processus qui ne sont pas lancés à partir de shells.

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