12 votes

Définition des variables dans le fichier environment.plist

J'ai essayé de comprendre comment définir les variables d'environnement nécessaires aux applications lancées dans Sierra, mais je suis perplexe.

Suivant divers conseils trouvés en ligne, j'ai créé un fichier ~/Library/LaunchAgents/environment.plist . Ça ressemble à ça :

<?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>my.startup</string>
  <key>ProgramArguments</key>
  <array>
    <string>sh</string>
    <string>-c</string>
    <string>
      launchctl setenv FOO foo
      launchctl setenv BAR bar
      <!-- ... -->
      launchctl setenv PATH /usr/local/opt/scala210/bin:/usr/local/bin:$PATH
    </string>
  </array>
  <key>RunAtLoad</key>
  <true/>
</dict>
</plist>

D'après mes expériences, il semble que rien de moins qu'un redémarrage du système ne permette de prendre en compte les modifications apportées à ce fichier. J'ai trouvé des mentions de cette commande qui est censée faire l'affaire :

$ launchctl load ~/Library/LaunchAgents/environment.plist

...mais quand je l'exécute, j'obtiens cette réponse :

[my home dir]/Library/LaunchAgents/environment.plist: service already loaded

Dans la documentation de launchctl Je vois la mention d'un -F drapeau qui semble pertinent :

Force the loading or unloading of the plist. Ignore the Disabled key.

Cependant, cela ne fait aucune différence si j'inclus ce commutateur ; j'obtiens le même résultat et le fichier est ignoré.

Quoi qu'il en soit, le redémarrage fait en sorte que les changements prennent effet (peut-être qu'une déconnexion et une reconnexion le feraient également ? je n'ai pas vérifié), mais à une exception près : le fichier PATH variable. Cette variable restait la même, quelle que soit la façon dont je la modifiais, et à travers les redémarrages. Finalement, je suis tombé sur une réponse de Stack Exchange qui avertissait de manière désinvolte que la modification de la variable PATH de cette manière seront ignorés jusqu'à ce que le Dock soit redémarré avec la commande killall Dock commandement. Donc j'ai fait ça, et j'ai redémarré, et enfin J'avais mon PATH correctement.

Donc, de toute façon, je suppose que ma principale question serait : Existe-t-il un moyen plus simple de mettre à jour les variables d'environnement que celui que j'ai décrit ci-dessus ? Et une question subsidiaire pourrait être : Est-ce que la gestion spéciale des PATH n'a aucun sens ?

9voto

klanomath Points 63400
  • Déchargez l'agent de lancement :

    launchctl unload ~/Library/LaunchAgents/environment.plist
  • Modifier les paramètres de plist/env

  • Chargez à nouveau l'agent de lancement :

    launchctl load ~/Library/LaunchAgents/environment.plist

Vous devez quitter et relancer le Terminal pour obtenir la nouvelle valeur de la variable dans le shell.

Avec l'exemple de Kuldeep Yadav. commentaire le fichier usr.aws.plist dans ~/Library/LaunchAgent/ ressemblerait alors à ceci :

<?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>usr.aws</string>
        <key>ProgramArguments</key>
        <array>
                <string>/bin/launchctl</string>
                <string>setenv</string>
                <string>AWS_SECRET_ACCESS_KEY</string>
                <string>loremipsum</string>
                <string>/bin/launchctl</string>
                <string>setenv</string>
                <string>AWS_ACCESS_KEY_ID</string>
                <string>loremipsum2</string>
                <string>/bin/launchctl</string>
                <string>setenv</string>
                <string>AWS_ACCESS_KEY</string>
                <string>loremipsum3</string>
                <string>/bin/launchctl</string>
                <string>setenv</string>
                <string>AWS_SECRET_KEY</string>
                <string>loremipsum4</string>
        </array>
        <key>RunAtLoad</key>
        <true/>
</dict>
</plist>

Ceci est seulement testé (et fonctionne) avec bash et zsh.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X