Mise à jour: Le lien ci - dessous n'a pas de réponse complète . Devoir définir le chemin ou la variable à deux endroits (un pour l'interface graphique et un pour le shell) est nul.
Pas de duplication de : Définition de variables d'environnement sous OS X?
Venant d'un arrière-plan Windows où il est très facile de définir et de modifier les variables d'environnement (il suffit d'aller dans Propriétés système> Avancé> Variables d'environnement), cela ne semble pas être aussi simple que cela sur Mac OS 10.5. La plupart des références indiquent que je devrais mettre à jour / etc / profile ou ~ / .profile. S'agit-il de l'équivalent des variables système et des variables utilisateur? Par exemple, où dois-je définir ma JAVA_HOME
variable?
ÉDITER:
Je veux pouvoir accéder à la variable depuis le terminal ainsi qu'une application comme Eclipse. De plus, j'espère ne pas avoir à redémarrer / déconnecter pour que cela prenne effet.
la source
Réponses:
Il n'y a pas besoin de duplication. Vous pouvez définir les variables d'environnement utilisées par launchd (et les processus enfants, c'est-à-dire tout ce que vous démarrez à partir de Spotlight) en utilisant
launchctl setenv
.Par exemple, si vous souhaitez mettre en miroir votre chemin actuel dans launchd après l'avoir configuré dans
.bashrc
ou ailleurs:Les variables d'environnement ne sont pas automatiquement mises à jour dans les applications en cours d'exécution. Vous devrez relancer les applications pour obtenir les variables d'environnement mises à jour (bien que vous puissiez simplement définir des variables dans votre shell, par exemple
PATH=whatever:you:want
, il n'est pas nécessaire de relancer le terminal).la source
launchctl setenv
semblent être visibles que par l'utilisateur effectuant la modification. Si je définis une variable en tant qu'utilisateur ordinaire, elle n'est pas visible par root (via sudo) et vice-versa.ps aux | grep launchd
le montrera. Vérifiez également lesman sudo
documents quisudo
(par défaut) réinitialisent délibérément l'environnement - si voussudo -E
conserverez l'environnement (y compris les variables avec lesquelles vous avez définilaunchctl setenv
). Avez-vous une application concrète pour cela, au fait? Si oui, cette méthode fonctionne-t-elle pour vous?Il existe plusieurs endroits où vous pouvez définir des variables d'environnement.
~/.profile
: utilisez ceci pour les variables que vous souhaitez définir dans tous les programmes lancés depuis le terminal (notez que, contrairement à Linux, tous les shells ouverts dans Terminal.app sont des shells de connexion).~/.bashrc
: ceci est appelé pour les shells qui ne sont pas des shells de connexion. Utilisez ceci pour les alias et autres choses qui doivent être redéfinies dans les sous-interpréteurs, pas pour les variables d'environnement héritées./etc/profile
: ceci est chargé avant ~ / .profile, mais est autrement équivalent. Utilisez-le lorsque vous voulez que la variable s'applique aux programmes de terminal lancés par tous les utilisateurs sur la machine (en supposant qu'ils utilisent bash).~/.MacOSX/environment.plist
: ceci est lu par loginwindow lors de la connexion. Il s'applique à toutes les applications, y compris celles de l'interface graphique, à l'exception de celles lancées par Spotlight dans 10.5 (et non 10.6). Vous devez vous déconnecter et vous reconnecter pour que les modifications prennent effet. Ce fichier n'est plus pris en charge à partir d'OS X 10.8.launchd
instance de votre utilisateur : cela s'applique à tous les programmes lancés par l'utilisateur, l'interface graphique et la CLI. Vous pouvez appliquer des modifications à tout moment en utilisant lasetenv
commande danslaunchctl
. En théorie , vous devriez pouvoir insérer dessetenv
commandes~/.launchd.conf
etlaunchd
les lire automatiquement lorsque l'utilisateur se connecte, mais en pratique, la prise en charge de ce fichier n'a jamais été implémentée. Au lieu de cela, vous pouvez utiliser un autre mécanisme pour exécuter un script à la connexion et faire appellaunchctl
à ce script pour configurer l'launchd
environnement./etc/launchd.conf
: ceci est lu par launchd lorsque le système démarre et lorsqu'un utilisateur se connecte. Ils affectent chaque processus du système, car launchd est le processus racine. Pour appliquer des modifications au launchd racine en cours d'exécution, vous pouvez diriger les commandes verssudo launchctl
.Les choses fondamentales à comprendre sont:
launchctl
; les variables mises à jour sont alors héritées par tous les nouveaux processus qu'il forge à partir de là.Exemple de définition d'une variable d'environnement avec launchd:
Maintenant, lancez votre application GUI qui utilise la variable, et le tour est joué!
Pour contourner le fait que
~/.launchd.conf
cela ne fonctionne pas, vous pouvez insérer le script suivant~/Library/LaunchAgents/local.launchd.conf.plist
:Ensuite, vous pouvez mettre à l'
setenv REPLACE_WITH_VAR REPLACE_WITH_VALUE
intérieur~/.launchd.conf
, et il sera exécuté à chaque connexion.Notez que, lorsque vous redirigez une liste de commandes dans launchctl de cette manière, vous ne pourrez pas définir de variables d'environnement avec des valeurs contenant des espaces. Si vous avez besoin de le faire, vous pouvez appeler launchctl comme suit:
launchctl setenv MYVARIABLE "QUOTE THE STRING"
.Notez également que d'autres programmes qui s'exécutent à la connexion peuvent s'exécuter avant le launchagent, et donc ne pas voir les variables d'environnement qu'il définit.
la source
~/.MacOSX/environment.plist
, sur mon Lion, il est lu et utilisé. Je viens de le tester. Je le préfère en fait à .launchd.conf car j'utilise le volet de préférences RCenvironment pour le maintenir.~/.launchd.conf
de travailler sur 10.6.8 - cela ne semble pas avoir d'effet. La page de manuel indique également que ce fichier n'est actuellement pas pris en charge.~/.launchd.conf
n'est toujours pas pris en charge et ne fonctionne pas à partir d'OS X 10.8.3? Voirman launchd.conf
Je pense que ce que l'OP recherche, c'est une solution simple, semblable à une fenêtre.
c'est parti:
https://www.macupdate.com/app/mac/14617/rcenvironment
la source
Vous pouvez lire sur Linux, qui est assez proche de ce qu'est Mac OS X. Ou vous pouvez lire sur BSD Unix, qui est un peu plus proche. Pour la plupart, les différences entre Linux et BSD ne sont pas très importantes.
/etc/profile
sont des variables d'environnement système.~/.profile
sont des variables d'environnement spécifiques à l'utilisateur."où dois-je définir ma variable JAVA_HOME?"
/etc/profile
?En général, je préfère ne pas jouer avec les paramètres du système même si je suis le seul utilisateur. Je préfère modifier mes paramètres locaux.
la source
Pour les applications GUI, vous devrez créer et modifier
~/.MacOSX/environment.plist
. Plus de détails ici . Vous devrez vous déconnecter pour que ceux-ci prennent effet. Je ne sais pas si elles affectent également les applications lancées depuis Terminal, mais je suppose qu'elles le feraient.Pour les applications lancées depuis Terminal, vous pouvez également modifier le fichier ~ / .profile.
la source
Ouvrez simplement le
~/.profile
fichier, vianano
dans Terminal et tapez ici:Enregistrez ce fichier (cmd + X et Y). Après cela, veuillez vous déconnecter / vous reconnecter ou simplement ouvrir un nouvel onglet dans Terminal et essayez d'utiliser votre nouvelle variable.
VEUILLEZ NE PAS oublier d'ajouter ": $ PATH" après ce que / vous / voulez, sinon vous effacerez tous les chemins de la variable PATH, qui étaient là avant cela.
la source
Synchronisez les variables d'environnement OS X pour les applications de ligne de commande et d'interface graphique à partir d'une seule source avec osx-env-sync .
J'ai également publié une réponse à une question connexe ici .
la source
Si vous souhaitez modifier les variables d'environnement de manière permanente sur macOS, définissez-les dans
/etc/paths
. Notez que ce fichier est en lecture seule par défaut, vous devrez donc chmod pour les autorisations d'écriture.la source
/usr/bin/local
dans ce fichier, même sans modifier le fichier, c'était comme ça par défaut, et pourtant mes applications GUI ne voient que/usr/bin:/bin:/usr/sbin:/sbin
. J'ai redémarré plusieurs fois.cat /etc/paths/
?Pour les utilisateurs de Mac OS X Catalina 2020:
Oubliez les autres réponses inutiles, voici seulement deux étapes nécessaires:
Créez un fichier avec la convention de dénomination: priority-appname. Ensuite, copiez-collez le chemin que vous souhaitez ajouter
PATH
.Par exemple
80-vscode
avec le contenu/Applications/Visual Studio Code.app/Contents/Resources/app/bin/
dans mon cas.Déplacez ce fichier vers
/etc/paths.d/
. N'oubliez pas d'ouvrir un nouvel onglet (nouvelle session) dans le Terminal et tapezecho $PATH
pour vérifier que votre chemin est ajouté!Remarque: cette méthode ajoute uniquement votre chemin
PATH
.la source