web-dev-qa-db-fra.com

Comment définir la variable d'environnement PATH globale sur OS X?

Je voudrais ajouter à la variable d'environnement global PATH sur OS X afin que tous les shells utilisateur et les applications GUI obtiennent le même environnement PATH.

Je sais que je peux ajouter le chemin dans les scripts de démarrage de Shell, mais ces paramètres ne sont pas hérités par les applications GUI.

La seule façon que j'ai trouvée jusqu'à présent est de redéfinir la variable d'environnement PATH dans / etc/launchd.conf:

setenv PATH /usr/bin:/bin:/usr/sbin:/sbin:/my/path

Je ne pouvais pas trouver un moyen d'ajouter réellement à PATH dans launchd.conf.

Je suis un peu inquiet à propos de cette méthode, mais jusqu'à présent, c'est la seule chose qui fonctionne. Y a-t-il une meilleure façon?

102
lajos

informations de l'interface graphique de palmer est correct, mais il existe un moyen plus simple de modifier le chemin vu par le shell. Comme mediaslave a dit , vous pouvez modifier /etc/paths, mais mieux encore, vous pouvez déposer un fichier texte dans /etc/paths.d/ qui contient un chemin et tous les shells construiront le chemin correctement.

Par exemple, sur mon système:

$ cat /etc/paths
/usr/bin
/bin
/usr/sbin
/sbin
/usr/local/bin
$ ls /etc/paths.d
X11       git      postgres
$ cat /etc/paths.d/postgres
/Library/PostgreSQL/8.4/bin
$ echo $PATH
/opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/git/bin:/Library/PostgreSQL/8.4/bin:/usr/X11/bin:/usr/local/mysql/bin
72
cogg

/etc/launchd.conf

Le launchd.conf file est ** la seule solution complète qui fonctionnera à la fois pour la ligne de commande et les applications GUI sur OS X v10.8 (Mountain Lion) et v10.9 (Mavericks ), qui fonctionnera avec les applications GUI et console, pour tous les utilisateurs.

Sudo touch /etc/launchd.conf
Sudo nano /etc/launchd.conf

Ajouter

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

Dans l'exemple ci-dessus, j'ai ajouté /usr/local/bin aux valeurs d'environnement par défaut pour PATH.

Gardez à l'esprit que ce fichier n'est pas un script et que vous n'avez pas la possibilité d'utiliser des substitutions. De plus, pour les appliquer, vous devez redémarrer.

N'oubliez pas que toutes les autres ne sont que des solutions partielles:

  • environment.plist ne fonctionne pas pour les applications lancées via Spotlight.
  • /etc/paths - uniquement pour la console
  • /etc/csh.cshrc ou /etc/bashrc - uniquement pour certains obus

Cette réponse est basée sur la même question de Définition des variables d'environnement sur Mac OS X.

48
sorin

Vous allez devoir le définir sur une base Shell par Shell; Les shells similaires à Bash et csh ne partagent pas les mêmes fichiers de configuration et la même syntaxe pour ajuster le PATH.

Essayer de le faire dans launchctl ne fonctionnera pas, car les variables d'environnement sont définies lors de la connexion; ils n'existent pas à l'échelle du système dans Unix en dehors d'une session Shell.

Vous allez donc vouloir ajouter

setenv PATH "$PATH:/add/my/extra/path"

à /etc/csh.cshrc et

export PATH="$PATH:/more/paths:/

à /etc/bashrc.

Si vous voulez des variables d'environnement dans les applications GUI, c'est plus compliqué. Vous devez créer un .MacOSX/environment.plist fichier dans le répertoire personnel de chaque utilisateur. Le .MacOSX le répertoire n'existera probablement pas par défaut, vous devrez donc le créer.

Le format du fichier est le suivant:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.Apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>

    <key>PRINTER</key>
    <string>myprinter</string>

    <key>PATH</key>
    <string>/path/to/thing/I/need</string>

    <key>DISPLAY</key>
    <string>0:1</string>

</dict>
</plist>

Plus sur le environment.plistsur le site d'Apple .

7
palmer

Vous pouvez modifier votre chemin global en ajoutant des lignes à /etc/paths, un chemin par ligne.

Sudo nano /etc/paths devrait vous y amener.

3
manumoomoo

Avez-vous consulté la page de manuel de la path_helper utilitaire de ligne de commande sur OS X? J'ai répondu à une question quelque peu connexe sur SO que je pense que vous pourriez trouver utile.

1
ayaz

Je ne sais pas si quelqu'un a couvert la manière la plus simple et la plus élégante . Au moins sur Mac OS X v10.6 (Snow Leopard).

Jouer avec le [/etc/|~/.] de [profile|bashrc] les fichiers peuvent fonctionner, mais c'est un peu un hack. Le /etc/paths.d/ répertoire est le chemin à parcourir:

  • Sudo dans votre éditeur préféré.
  • Créez un nouveau fichier nommé *name* (ne le nommez pas quelque chose qui est déjà là) dans /etc/paths.d/ avec un chemin par ligne:

    /usr/X11/bin
    /Developer/usr/bin
    
  • Puis ajouter

    eval '/usr/libexec/path_helper -s`
    

    à profile ou bashrc, et vous devriez être prêt à partir.

1
noboomu

Je ne sais pas pourquoi vous utiliseriez /etc/launchd.conf par opposition à /etc/profile - mais je ne suis pas un expert de Mac OS X - je vous crois en ce que je suis sûr que cela fonctionne, mais launchd est l'implémentation/remplacement de Mac OS X pour init - Mac OS X me confond.

En tous cas, setenv PATH "$PATH:/more/paths:/and/more/paths" fonctionnera (tcsh), et l'équivalent de bourn Shell est export PATH="$PATH:/more/paths:/and/more/paths" - Je ne sais pas non plus comment launchd est lié à un Shell particulier.

Je pense que j'ai posé plus de questions que j'ai répondu =)

0
Xerxes

Je ne sais pas si launchd accepte cela, mais essayez:

setenv PATH "$ PATH:/mon/chemin"
0
user1686