945 votes

Variables d’environnement dans OS X ?

Quelle est la bonne façon de modifier les variables d’environnement comme chemin d’accès dans OS X ? J’ai regardé un peu sur google et trouvé 3 différents fichiers à modifier :

  • / etc/chemins
  • ~/.Profile
  • ~/.tcshrc

Je n’ai même certains d'entre eux, et je suis sûr que .tcshrc est faux, puisqu’osx utilise bash maintenant. Quelqu'un a une idée où ces variables, notamment le chemin d’accès, sont définis ?

Edit : je suis sous OS X 10.5

694voto

Matthew McCullough Points 7713

Bruno est sur la bonne voie. J'ai fait des recherches approfondies et si vous souhaitez définir des variables qui sont disponibles dans toutes les applications à interface graphique, votre seule option est de /etc/launchd.conf

Veuillez noter que l'environnement.plist ne fonctionne pas pour les applications lancées via Spotlight. Ceci est documenté par Steve Sexton ici.

1) Ouvrez une invite du terminal

2) Type sudo vi /etc/launchd.conf (note: ce fichier existe pas encore)

3) Mettre le contenu comme suit dans le fichier

# Set environment variables here so they are available globally to all apps
# (and Terminal), including those launched via Spotlight.
#
# After editing this file run the following command from the terminal to update 
# environment variables globally without needing to reboot.
# NOTE: You will still need to restart the relevant application (including 
# Terminal) to pick up the changes!
# grep -E "^setenv" /etc/launchd.conf | xargs -t -L 1 launchctl
#
# See http://www.digitaledgesw.com/node/31
# and http://stackoverflow.com/questions/135688/setting-environment-variables-in-os-x/
#
# Note that you must hardcode the paths below, don't use enviroment variables.
# You also need to surround multiple values in quotes, see MAVEN_OPTS example below.
#
setenv JAVA_VERSION 1.6
setenv JAVA_HOME /System/Library/Frameworks/JavaVM.framework/Versions/1.6/Home
setenv GROOVY_HOME /Applications/Dev/groovy
setenv GRAILS_HOME /Applications/Dev/grails
setenv NEXUS_HOME /Applications/Dev/nexus/nexus-webapp
setenv JRUBY_HOME /Applications/Dev/jruby

setenv ANT_HOME /Applications/Dev/apache-ant
setenv ANT_OPTS -Xmx512M

setenv MAVEN_OPTS "-Xmx1024M -XX:MaxPermSize=512m"
setenv M2_HOME /Applications/Dev/apache-maven

setenv JMETER_HOME /Applications/Dev/jakarta-jmeter

4) Enregistrez vos modifications en VI-le et redémarrez votre Mac. Ou d'utiliser la commande grep/xargs commande afficher dans le code commentaire ci-dessus.

5) Prouver que vos variables sont de travail par l'ouverture d'une fenêtre de Terminal et en tapant export et vous devriez voir votre nouveau variables. Ils seront également disponibles à l'Ide, et d'autres applications à interface graphique vous lancer via Spotlight.

319voto

Matt Curtis Points 12454

Configuration de l'environnement pour de nouveaux processus a commencé par Spotlight

Vous pouvez définir l'environnement utilisé par launchd (et, par extension, tout a commencé à partir de Spotlight) avec launchctl setenv. Par exemple, pour définir le chemin d'accès:

launchctl setenv PATH /opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin

Ou si vous souhaitez configurer votre chemin en .bashrc ou similaire, puis de miroir dans launchd:

PATH=/opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin
launchctl setenv PATH $PATH

Il n'y a pas besoin de rebooter , mais vous devrez redémarrer une application si vous le souhaitez pour ramasser l'environnement a changé.

Cela inclut toutes les coques déjà en cours d'exécution en vertu de Terminal.app, bien que si vous êtes là, vous pouvez mettre l'environnement, plus directement, par exemple, avec export PATH=/opt/local/bin:/opt/local/sbin:$PATH pour bash ou zsh.

Les modifications seront perdues après un redémarrage

Pour conserver les modifications après un redémarrage , vous pouvez définir les variables d'environnement à partir d' /etc/launchd.conf, comme suit:

setenv PATH /opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin

launchd.conf est exécuté automatiquement lorsque vous redémarrez.

Si vous souhaitez que ces modifications prennent effet, vous devez utiliser cette commande pour retraiter launchctl.conf (merci @mklement pour l'astuce!)

egrep -v '^\s*#' /etc/launchd.conf | launchctl

Vous pouvez en savoir plus sur launchctl et comment il charge launchd.conf avec la commande man launchctl.

109voto

tim_yates Points 63521

Jusqu'à et y compris le Lion (10.7), vous pouvez les mettre dans

~/.MacOSX/environnement.plist

Voir:

Pour le CHEMIN dans le Terminal, vous devriez être en mesure de mettre en .bash_profile ou .profile (vous aurez probablement à le créer tout de même)

Pour Mountain lion et au-delà , vous devez utiliser launchd et launchctl

62voto

MrROY Points 2985

1.

Le fichier peut ne pas exister (sinon, vous pouvez la créer seulement).

  1. Saisissez dans le présent et enregistrez le fichier :

  2. Exécutez

37voto

pajato0 Points 1689

Il y a essentiellement deux problèmes à résoudre lorsque vous traitez avec les variables d'environnement dans OS X. La première est lors de l'appel de programmes à partir de l'actualité (l'icône de la loupe sur le côté droit de la Mac menu/barre d'état) et la seconde lors de l'appel de programmes à partir du Dock. Appel des programmes à partir d'un Terminal d'application/utilitaire est trivial car il lit l'environnement du shell standard emplacements (~/.profile, ~/.bash_profile, ~/.bashrc, etc.)

Lors de l'appel de programmes de la station d'accueil, utilisez ~/.MacOSX/environment.plist où l' <dict> élément contient une séquence de <key>KEY</key><string>theValue</string> - éléments.

Lors de l'appel de programmes de Projecteur, assurez-vous que launchd a été le programme d'installation avec toutes les clés/valeurs des paramètres dont vous avez besoin.

Pour résoudre les deux problèmes simultanément, j'utilise un élément d'ouverture de session (set via la Le système de Préférences de l'outil) sur mon compte d'Utilisateur. L'élément d'ouverture de session est un script bash qui invoque un Emacs lisp fonction, même si on peut bien sûr utiliser leurs favori outil de script pour accomplir la même chose. Cette approche il a l'avantage supplémentaire que cela fonctionne à tout moment et ne nécessite pas de reboot, c'est à dire on peut éditer ~/.profile, exécutez la connexion dans la coquille et les changements visibles pour les nouveaux invoqués programmes, à partir du Dock ou feux des Projecteurs.

Détails:

Élément d'ouverture de session: ~/bin/macosx-startup

#!/bin/bash
bash -l -c "/Applications/Emacs.app/Contents/MacOS/Emacs --batch -l ~/lib/emacs/elisp/macosx/environment-support.el -f generate-environment"

Emacs lisp fonction: ~/lib/emacs/elisp/macosx/envionment-support.el

;;; Provide support for the environment on Mac OS X

(defun generate-environment ()
  "Dump the current environment into the ~/.MacOSX/environment.plist file."
  ;; The system environment is found in the global variable:
  ;; 'initial-environment' as a list of "KEY=VALUE" pairs.
  (let ((list initial-environment)
        pair start command key value)
    ;; clear out the current environment settings
    (find-file "~/.MacOSX/environment.plist")
    (goto-char (point-min))
    (setq start (search-forward "<dict>\n"))
    (search-forward "</dict>")
    (beginning-of-line)
    (delete-region start (point))
    (while list
      (setq pair (split-string (car list) "=")
            list (cdr list))
      (setq key (nth 0 pair)
            value (nth 1 pair))
      (insert "  <key>" key "</key>\n")
      (insert "  <string>" value "</string>\n")

      ;; Enable this variable in launchd
      (setq command (format "launchctl setenv %s \"%s\"" key value))
      (shell-command command))
    ;; Save the buffer.
    (save-buffer)))

REMARQUE: Cette solution est un amalgame de ceux à venir avant, j'ai ajouté de la mine, en particulier celle offerte par Matt Curtis, mais j'ai délibérément essayé de garder mon ~/.bash_profile contenu indépendant de la plateforme et mettre le réglage de l' launchd environnement (Mac uniquement de l'installation) dans un script séparé.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X