Question

Mise à jour: le lien ci-dessous n'a pas de réponse complète . Le fait de définir le chemin ou la variable à deux endroits (un pour l'interface graphique et l'autre pour le shell) est nul

Pas de duplication de : Définition de variables d'environnement dans OS X ?

Venant d'un environnement Windows où il est très facile de définir et de modifier des variables d'environnement (allez simplement dans Propriétés système> Options avancées> variables d'environnement), cela ne semble pas être aussi simple sous Mac OS 10.5. La plupart des références disent que je devrais mettre à jour / etc / profile ou ~ / .profile. S'agit-il de variables système et de variables utilisateur? Par exemple, où devrais-je définir ma variable JAVA_HOME ?

EDIT:

Je souhaite pouvoir accéder à la variable à partir du terminal ainsi qu'à une application telle qu'Eclipse. De plus, j'espère ne pas avoir à redémarrer / déconnecter pour que cela prenne effet.

Était-ce utile?

La solution

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 depuis Spotlight) à l’aide de launchctl setenv .

Par exemple, si vous souhaitez mettre en miroir votre chemin actuel dans launchd après l'avoir configuré dans .bashrc ou ailleurs:

PATH=whatever:you:want
launchctl setenv PATH $PATH

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 = p>

Autres conseils

Vous pouvez définir des variables d'environnement à plusieurs endroits.

  • ~ / .profile : utilisez-le 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 login. Utilisez ceci pour les alias et autres choses qui doivent être redéfinies dans des sous-shell, pas pour les variables d'environnement héritées.
  • / etc / profile : celui-ci est chargé avant ~ / .profile, mais est sinon équivalent. Utilisez-le lorsque vous souhaitez que la variable s'applique aux programmes de terminaux lancés par tous les utilisateurs de 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 à interface graphique, à l'exception de celles lancées par Spotlight dans 10.5 (et non dans 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 de OS X 10.8.
  • instance launchd de votre utilisateur: cela s'applique à tous les programmes lancés par l'utilisateur, l'interface graphique utilisateur et la CLI. Vous pouvez appliquer des modifications à tout moment en utilisant la commande setenv dans launchctl . En théorie , vous devriez pouvoir insérer des commandes setenv dans ~ / .launchd.conf et launchd lisez-les 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 lors de la connexion et le faire appeler launchctl pour configurer l'environnement launchd .
  • /etc/launchd.conf : ceci est lu par launchd au démarrage du système et lorsqu'un utilisateur se connecte. Ils affectent tous les processus du système, car launchd est le processus racine. Pour appliquer les modifications à la racine launchd en cours, vous pouvez diriger les commandes vers sudo launchctl .

Les choses fondamentales à comprendre sont:

  • les variables d'environnement sont héritées par les enfants d'un processus au moment de leur création.
  • le processus racine est une instance launchd. Il existe également une instance launchd distincte par session utilisateur.
  • launchd vous permet de modifier ses variables d'environnement actuelles à l'aide de launchctl ; les variables mises à jour sont ensuite héritées par tous les nouveaux processus qu’elle redemande ensuite.

Exemple de définition d'une variable d'environnement avec launchd:

echo setenv REPLACE_WITH_VAR REPLACE_WITH_VALUE | launchctl

Lancez votre application graphique utilisant la variable et le tour est joué!

Pour éviter le fait que ~ / .launchd.conf ne fonctionne pas, vous pouvez insérer le script suivant dans ~ / Library / LaunchAgents / local.launchd.conf.plist :

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key>
  <string>local.launchd.conf</string>
  <key>ProgramArguments</key>
  <array>
    <string>sh</string>
    <string>-c</string>
    <string>launchctl &lt; ~/.launchd.conf</string>    
  </array>
  <key>RunAtLoad</key>
  <true/>
</dict>
</plist>

Ensuite, vous pouvez mettre setenv REPLACE_WITH_VAR REPLACE_WITH_VALUE dans ~ / .launchd.conf et sera exécuté à chaque connexion.

Notez que, lorsque vous redistribuez 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 exécutés lors de la connexion peuvent s’exécuter avant le launchagent et risquent donc de ne pas voir les variables d’environnement qu’il définit.

Je pense que le PO recherche une solution simple, semblable à celle de Windows.

ici vous allez:

https://www.macupdate.com/app/mac/14617/rcenvironment

Vous pouvez lire sur Linux, ce qui est assez proche de ce que Mac OS X est. 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ù devrais-je définir ma variable JAVA_HOME?"

  • Avez-vous plusieurs utilisateurs? S'en soucient-ils? Souhaitez-vous gâcher un autre utilisateur en modifiant un / etc / profile ?

En général, je préfère ne pas modifier les paramètres du système, même si je suis le seul utilisateur. Je préfère modifier mes paramètres locaux.

Pour les applications à interface graphique, vous devez 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 s'ils affectent également les applications lancées à partir de Terminal, mais je suppose qu'ils le feraient.

Pour les applications lancées depuis Terminal, vous pouvez également modifier le fichier ~ / .profile.

Ouvrez simplement le fichier ~ / .profile , via nano dans Terminal et tapez-y:

export PATH=whatever/you/want:$PATH

Enregistrez ce fichier (cmd + X et Y). Ensuite, déconnectez-vous / connectez-vous à nouveau ou ouvrez simplement un nouvel onglet dans Terminal et essayez d’utiliser votre nouvelle variable.

VEUILLEZ NE PAS oublier d’ajouter ":: $ PATH " après tout ce que vous voudrez, sinon, vous effacerez tous les chemins de la variable PATH, qui existaient auparavant.

Synchronisez les variables d'environnement OS X pour les applications de ligne de commande et d'interface graphique à partir d'une source unique avec osx-env-sync .

J'ai également posté une réponse à une question connexe ici .

Si vous souhaitez modifier les variables d'environnement de manière permanente sur macOS, définissez-les dans / etc / chemins . Remarque , ce fichier est en lecture seule par défaut. Vous devez donc chmod pour pouvoir utiliser les droits en écriture.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top