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


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’à 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.

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?


97
2018-05-31 19:08


origine


Voir: stackoverflow.com/questions/347286 - rjmunro
Pour Yosemite et les versions ultérieures, voir stackoverflow.com/questions/25385934/… - thSoft
Aucune des réponses ici ne répond à la question du PO. Mais le commentaire de thSoft est juste sur l'argent! Cela devrait peut-être être fusionné ou lié à cette question référencée: stackoverflow.com/questions/25385934/… - Kevin Buchs


Réponses:


Informations sur l'interface graphique de Palmer est correct, mais il existe un moyen plus facile à maintenir pour modifier le chemin vu par le shell. Comme mediaslave a dit, vous pouvez éditer /etc/paths, mais encore mieux, 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

70
2018-05-28 06:53



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 relancer X11 (moins douloureux que de se déconnecter complètement). Je ne l'ai pas essayé dans Terminal. - Peter Gluck
Je parlais de Terminal - vous avez raison, j'ai oublié de préciser. - weronika
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 cherchait un unifié solution qui lui permet de 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


/etc/launchd.conf

le launchd.conf Le fichier est ** la seule solution complète qui fonctionne pour les applications de ligne de commande et d’interface graphique OS X v10.8 (Lion de montagne) et v10.9 (Mavericks), celui 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.

N'oubliez pas 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.cshrc ou /etc/bashrc - seulement pour quelques coquillages

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


47
2018-06-04 20:30



Bonne découverte, mais la question parle déjà de lancé et demande comment ajouter au chemin en elle. - cregox
Avez-vous vraiment ajouté un commentaire à la question initiale en vous désignant comme "la vraie réponse"? - TJ Luoma
C'est implicite par votre réponse - utile -, mais juste pour préciser: le désir du PO de ajouter Le chemin par défaut n'est pas pris en charge car vous ne pouvez pas référencer 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
selon apple.stackexchange.com/questions/106355/…, cela ne fonctionne plus pour Yosemite ou plus tard - ericn


Vous allez devoir le configurer shell par shell; Les shells de type Bash et csh ne partagent pas les mêmes fichiers de configuration et la même syntaxe pour ajuster le PATH.

Essayer de faire cela 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 sous Unix en dehors d'une session shell.

Donc, vous allez 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 graphiques, 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 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  est sur le site d'Apple.


7
2018-06-01 12:24



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
Juste une mise à jour à partir de OS X 10.8: le ~/.MacOSX/environment.plist L’approche n’est plus prise en charge et il n’ya pas de substitut au niveau utilisateur. À l'échelle du système, vous pouvez utiliser /etc/launchd.conf(et il y a une solution par - *. app). - mklement
Ne répond pas aux questions de OP. - Kevin Buchs


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

sudo nano /etc/paths devrait vous y rendre.


3
2017-09-03 18:04



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


Avez-vous consulté la page de manuel du path_helper Utilitaire de ligne de commande sous OS X? J'ai répondu a question un peu liée sur SO que je pense que vous pourriez trouver utile.


1
2018-06-01 12:50





Je ne sais pas si quelqu'un est couvert le plus simple et plus élégant façon. Au moins sur Mac OS X 10.6 (Léopard des neiges).

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éer un nouveau fichier nommé *name* (juste ne nommez pas quelque chose qui est déjà dedans) 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 bashrcet vous devriez être prêt à partir.


1
2018-01-31 07:22



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


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

setenv PATH "$ PATH: / mon / chemin"

0
2018-05-31 19:26



Malheureusement ça ne marche pas. Il ne semble pas que launchctl ait facilement accès aux variables d'environnement. Il existe une commande permettant d’obtenir des variables d’environnement, mais il n’existe absolument aucune documentation sur son utilisation. - lajos


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 que je suis sûr que cela fonctionne, mais launchd l’implémentation / remplacement de Mac OS X pour init - Mac OS X m'embrouille.

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 comment launchd est liée à un shell particulier non plus.

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


0
2018-06-01 04:10



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
Oui, merci d'avoir éclairci ça pour moi :) - Xerxes
Unix? Bien sûr, c'est unix. Je veux dire, en quelque sorte. Oui, nous avons cassé des choses qui ont fonctionné pendant 30 ans, mais ça reste unix! /soupir - Matt Simmons