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

101

J'aimerais ajouter à la variable d'environnement PATH globale sous OS X afin que tous les shells d'utilisateurs et applications à interface graphique obtiennent le même environnement PATH.

Je sais que je peux ajouter au chemin d'accès dans les scripts de démarrage du shell, mais ces paramètres ne sont pas hérités par les applications à interface graphique.

Le seul moyen que j'ai trouvé jusqu'ici 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.

Cette méthode m'inquiète un peu, mais jusqu'à présent, c'est la seule chose qui fonctionne. Y a-t-il un meilleur moyen?

lajos
la source
2
Pour Yosemite et les
versions
Aucune des réponses ici ne répond à la question du PO. Mais le commentaire de thSoft est juste sur l'argent! Peut-être que cela devrait être fusionné ou lié à cette question référencée: stackoverflow.com/questions/25385934/…
Kevin Buchs

Réponses:

71

Les informations de l'interface utilisateur de Palmer sont correctes, mais il existe un moyen plus facile à gérer de modifier le chemin d'accès vu par le shell. Comme dit mediaslave , vous pouvez éditer /etc/paths, mais encore mieux, vous pouvez déposer un fichier texte contenant /etc/paths.d/un chemin et tous les shells le construiront 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
cogg
la source
1
Nice, merci! Remarque: vous devez vous déconnecter et vous reconnecter avant que cela fonctionne.
Weronika
@weronika: J'ai trouvé qu'il suffisait d'arrêter et de redémarrer X11(moins douloureux que de se déconnecter complètement). Je n'y suis pas allé dans Terminal.
Peter Gluck
Je parlais de Terminal - vous avez raison, j'ai oublié de préciser.
Weronika
8
C'est bon à savoir, mais cela ne répond PAS à la question du PO car ce mécanisme ne s'applique pas aux applications à interface graphique. Le PO recherchait une solution unifiée lui permettant d’ ajouter à la valeur par défaut $PATH.
mklement
qu'entendez-vous par "mon système" ici, @cogg? Est-ce que nous n'utilisons pas tous OS X ici? Désolé, mais je suis encore nouveau sur OS X. J'utilise OS X 10.7
ericn
48

/etc/launchd.conf

Ce launchd.conffichier est ** la seule solution complète qui fonctionne pour les applications de ligne de commande et d'interface graphique sous OS X v10.8 (Mountain Lion) et v10.9 (Mavericks), qui fonctionnera avec les applications d'interface graphique et de 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/binaux valeurs d'environnement par défaut de PATH.

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

Rappelez-vous, tous les autres ne sont que des solutions partielles:

  • environment.plist ne fonctionne pas pour les applications lancées via Spotlight.
  • /etc/paths - seulement pour console
  • /etc/csh.cshrcou /etc/bashrc- seulement pour quelques coquillages

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

sorin
la source
7
Excellent résultat, mais la question parle déjà de launchd et demande comment y ajouter le chemin.
cregox
21
Avez-vous vraiment ajouté un commentaire à la question initiale en vous désignant comme "la vraie réponse"?
TJ Luoma
7
C'est implicite dans votre réponse - utile -, mais juste pour le préciser: le souhait du PO d' ajouter au chemin par défaut n'est pas pris en charge, car vous ne pouvez pas faire référence à d'autres variables d'environnement dans /etc/launchd.conf.
mklement
Ce n'est pas global - l'environnement de ligne de commande l'ignorera lorsque / etc / profile appelle path_helper et reconstruit PATH à partir de / etc / path et de /etc/paths.d/
Dave X
1
selon apple.stackexchange.com/questions/106355/… , cela ne fonctionne plus pour Yosemite ou plus tard
ericn
7

Vous allez devoir le configurer coque par coque; Les shells de type bash et csh ne partagent pas les mêmes fichiers de configuration et la même syntaxe pour l'ajustement du chemin PATH.

Essayer de faire cela dans launchctlne fonctionnera pas, car les variables d'environnement sont définies lors de la connexion. ils n'existent pas à l'échelle du système sous Unix en dehors d'une session shell.

Donc, vous allez vouloir ajouter

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

à /etc/csh.cshrcet

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

à /etc/bashrc.

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

Le format du fichier est comme suit:

<?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.plist site Apple .

palmer
la source
Mais les paramètres prennent effet lorsqu'ils sont définis dans /etc/launchd.conf ... Hmmm ... / me est confus.
Xerxes
Vraiment? Quelle variable d'environnement définissez-vous là?
Palmer
1
Juste une mise à jour à partir de OS X 10.8: l' ~/.MacOSX/environment.plistapproche n'est plus prise en charge et il n'y a pas de substitut au niveau utilisateur. Vous pouvez utiliser l’ensemble du système /etc/launchd.conf(et il existe une solution personnalisée - *. App).
mklement
Ne répond pas aux questions de OP.
Kevin Buchs
3

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

sudo nano /etc/paths devrait vous y rendre.

manumoomoo
la source
2
C'est bon à savoir, mais cela ne répond pas à la question du PO car ce mécanisme ne s'applique pas aux applications à interface graphique.
mklement
1

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

Ayaz
la source
1

Je ne suis pas sûr si quelqu'un a couvert la manière la plus simple et la plus élégante . Au moins sur Mac OS X 10.6 (Snow Leopard).

Messing avec le [/etc/|~/.]des [profile|bashrc]fichiers peut fonctionner, mais il est un peu d'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 lui donnez pas simplement un nom qui s'y trouve déjà) /etc/paths.d/avec un chemin par ligne:

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

    eval '/usr/libexec/path_helper -s`
    

    à profileou bashrc, et vous devriez être bon pour aller.

noboomu
la source
1
C'est bon à savoir, mais cela ne répond pas à la question du PO car ce mécanisme ne s'applique pas aux applications à interface graphique.
mklement
Le nom du fichier est-il littéralement *name*? Ou voulez-vous dire juste name?
Peter Mortensen
0

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

setenv PATH "$ PATH: / mon / chemin"
Grawity
la source
1
Malheureusement ça ne marche pas. Launchctl ne semble pas avoir accès à des variables d’environnement aussi faciles. Il existe une commande permettant d’obtenir des variables d’environnement, mais il n’ya absolument aucune documentation sur son utilisation.
lajos
0

Je ne suis pas sûr de savoir pourquoi vous utiliseriez /etc/launchd.confplutôt que /etc/profile- mais je ne suis pas un expert en Mac OS X - je vous crois que je suis sûr que cela fonctionne, mais qu'il launchds'agit de l'implémentation / remplacement de Mac OS X pour init- Mac OS X me confond.

Quoi qu'il en soit, setenv PATH "$PATH:/more/paths:/and/more/paths"ça fonctionnera (tcsh), et l’équivalent de bourn shell est export PATH="$PATH:/more/paths:/and/more/paths"- je n’ai aucune idée de la façon dont il launchdest lié à un shell particulier.

Je pense avoir posé plus de questions que de réponses =)

Xerxes
la source
4
Les paramètres de chemin / etc / profile ne sont visibles par aucune des applications de l'interface graphique OS X. Cela s'applique uniquement à bash. Je veux que toutes les applications obtiennent le nouveau paramètre de chemin.
lajos
1
Unix? Bien sûr, c'est unix. Je veux dire, en quelque sorte. Oui, nous avons cassé des trucs qui ont fonctionné pendant 30 ans, mais ça reste unix! / soupir
Matt Simmons