web-dev-qa-db-fra.com

Définition de variables d'environnement sur OS X

Quelle est la bonne façon de modifier des variables d'environnement telles que PATH dans OS X?

J'ai un peu cherché sur Google et trouvé trois fichiers différents à modifier:

  • / etc/chemins
  • ~/.profile
  • ~/.tcshrc

Je n'ai même pas certains de ces fichiers, et je suis à peu près sûr que . Tcshrc est faux, car OS X utilise maintenant bash. Où ces variables, notamment PATH, sont-elles définies?

J'utilise OS X v10.5 (Leopard).

830
Paul Wicks

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

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

  1. Ouvrir une invite de terminal

  2. Tapez Sudo vi /etc/launchd.conf (note: ce fichier peut ne pas exister)

  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 environment 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 dans vi et redémarrez votre Mac. Ou utilisez la commande grep / xargs indiquée dans le commentaire de code ci-dessus.

  5. Prouvez que vos variables fonctionnent en ouvrant une fenêtre de terminal et en tapant export. Vous devriez voir vos nouvelles variables. Celles-ci seront également disponibles dans IntelliJ IDEA et dans d'autres applications graphiques que vous lancez via Spotlight.

643
Matthew McCullough

Comment définir l'environnement pour les nouveaux processus lancés par Spotlight (sans avoir à redémarrer)

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

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

Ou si vous voulez configurer votre chemin dans .bashrc ou similaire, faites-le refléter dans launchd:

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

Il n'est pas nécessaire de redémarrer bien que vous deviez redémarrer une application si vous voulez qu'elle prenne en compte l'environnement modifié.

Cela inclut tous les shells déjà exécutés sous Terminal.app, bien que si vous y êtes, vous pouvez définir l'environnement plus directement, par exemple. avec export PATH=/opt/local/bin:/opt/local/sbin:$PATH pour bash ou zsh.

Comment conserver les modifications après un redémarrage

Pour conserver les modifications après un redémarrage vous pouvez définir les variables d'environnement à partir de /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 maintenant, vous devez utiliser cette commande pour retraiter launchctl.conf (merci à @mklement pour le conseil!)

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.

255
Matt Curtis

Jusqu'à et y compris OS X v10.7 (Lion) vous peut les mettre en:

~/.MacOSX/environment.plist

Voir:

Pour PATH dans le terminal, vous devriez pouvoir définir dans .bash_profile ou .profile (vous devrez probablement le créer).

Pour OS X v10.8 (Lion de montagne) et au-delà - vous devez utiliser launchd et launchctl .

106
tim_yates

Solution pour les applications de ligne de commande et d'interface graphique à partir d'une source unique (fonctionne avec Mac OS X v10.1 (Yosemite) et Mac OS X v10.11 (El Capitan))

Supposons que vous avez des définitions de variable d'environnement dans votre ~/.bash_profile comme dans l'extrait suivant:

export Java_HOME="$(/usr/libexec/Java_home -v 1.8)"
export GOPATH="$HOME/go"
export PATH="$PATH:/usr/local/opt/go/libexec/bin:$GOPATH/bin"
export PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"
export MANPATH="/usr/local/opt/coreutils/libexec/gnuman:$MANPATH"

Nous avons besoin d'un agent de lancement qui s'exécutera à chaque connexion et à tout moment à la demande, chargé de charger ces variables dans la session utilisateur. Nous aurons également besoin d'un script Shell pour analyser ces définitions et créer les commandes nécessaires à l'exécution de l'agent.

Créez un fichier avec le suffixe plist (nommé par exemple osx-env-sync.plist) dans le répertoire ~/Library/LaunchAgents/ avec le contenu suivant:

<?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>osx-env-sync</string>
  <key>ProgramArguments</key>
  <array>
    <string>bash</string>
    <string>-l</string>
    <string>-c</string>
    <string>
      $HOME/.osx-env-sync.sh
    </string>
  </array>
  <key>RunAtLoad</key>
  <true/>
</dict>
</plist>

Le paramètre -l est essentiel ici; Il est nécessaire d'exécuter le script Shell avec un login Shell pour que ~/.bash_profile soit créé avant que ce script ne soit exécuté.

Maintenant, le script shell. Créez-le à ~/.osx-env-sync.sh avec le contenu suivant:

grep export $HOME/.bash_profile | while IFS=' =' read ignoreexport envvar ignorevalue; do
  launchctl setenv ${envvar} ${!envvar}
done

Assurez-vous que le script shell est exécutable:

chmod +x ~/.osx-env-sync.sh

Maintenant, chargez l'agent de lancement pour la session en cours:

launchctl load ~/Library/LaunchAgents/osx-env-sync.plist

(Re) Lancez une application graphique et vérifiez qu'elle peut lire les variables d'environnement.

L'installation est persistante. Il survivra aux redémarrages et aux relogins.

Après la configuration initiale (que vous venez de faire), si vous souhaitez refléter à nouveau les modifications apportées à votre ~/.bash_profile dans l'ensemble de votre environnement, la réexécution de la commande launchctl load ... n'effectuera pas ce que vous souhaitez. à la place, vous recevrez un avertissement semblable à celui-ci:

<$HOME>/Library/LaunchAgents/osx-env-sync.plist: Operation already in progress

Pour recharger vos variables d'environnement sans passer par le processus de déconnexion/connexion, procédez comme suit:

launchctl unload ~/Library/LaunchAgents/osx-env-sync.plist
launchctl load ~/Library/LaunchAgents/osx-env-sync.plist

Enfin, assurez-vous de relancer vos applications en cours d'exécution (y compris Terminal.app) pour les informer des modifications.

J'ai également transmis le code et les explications ici à un projet GitHub: osx-env-sync .

J'espère que cela va être la solution ultime, du moins pour les dernières versions d'OS X (Yosemite et El Capitan).

64
Ersin Er
  1. Faire:

    vim ~/.bash_profile
    

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

  2. Tapez ceci et enregistrez le fichier:

    export PATH=$PATH:YOUR_PATH_HERE
    
  3. Courir

    source ~/.bash_profile
    
51
MrROY

Il existe essentiellement deux problèmes à résoudre lorsque vous utilisez des variables d’environnement dans OS X. Le premier concerne l’appel de programmes à partir de Spotlight (la loupe située à droite du menu/barre d’état Mac) et le second lors de l’appel de programmes à partir du Dock. . L'appel de programmes à partir d'une application/d'un utilitaire Terminal est trivial car il lit l'environnement à partir des emplacements standard du shell (~/.profile, ~/.bash_profile, ~/.bashrc, etc.).

Lorsque vous appelez des programmes à partir du Dock, utilisez ~/.MacOSX/environment.plist où l'élément <dict> contient une séquence d'éléments <key>KEY</key><string>theValue</string>.

Lorsque vous appelez des programmes à partir de Spotlight, assurez-vous que launchd a été configuré avec tous les paramètres clé/valeur requis.

Pour résoudre les deux problèmes simultanément, j'utilise un élément de connexion (défini via l'outil Préférences Système) sur mon compte d'utilisateur. L'élément de connexion est un script bash qui appelle une fonction LISP d'Emacs, bien que l'on puisse bien sûr utiliser leur outil de script favori pour accomplir la même chose. Cette approche présente l’avantage supplémentaire de fonctionner à tout moment et ne nécessite aucun redémarrage, c’est-à-dire que l’on peut éditer ~/.profile, exécuter l’élément de connexion dans un shell et afficher les modifications des programmes nouvellement appelés, à partir du Dock. ou Spotlight.

Détails:

Élément de connexion: ~/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"

Fonction LISP Emacs: ~/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)))

NOTE: Cette solution est un amalgame de ceux qui venaient avant que j'ajoute le mien, en particulier celui proposé par Matt Curtis, mais j'ai délibérément essayé de garder ma plateforme de contenu ~/.bash_profile indépendante et de mettre le paramètre de l'environnement launchd (une installation Mac uniquement) dans un script séparé.

34
pajato0

Une autre solution gratuite, opensource et Mac OS X v10.8 (Mountain Lion) Préférences/environment.plist est EnvPane .

EnvPane's code source disponible sur GitHub . EnvPane semble avoir des fonctionnalités comparables à RCEnvironment . Cependant, il semble pouvoir mettre à jour instantanément ses variables stockées, c.-à-d. sans le besoin d'un redémarrage ou d'une connexion, ce qui est le bienvenu.

Comme l'a déclaré le développeur:

EnvPane est une sous-fenêtre de préférences pour Mac OS X 10.8 (Mountain Lion) qui vous permet de définir des variables d’environnement pour tous les programmes dans les sessions graphiques et les sessions de terminal. Non seulement il restaure la prise en charge de ~/.MacOSX/environment.plist dans Mountain Lion, mais il publie également immédiatement les modifications apportées à l'environnement, sans qu'il soit nécessaire de se déconnecter puis de se reconnecter. <SNIP> EnvPane inclut (et installe automatiquement) un L'agent launchd qui s'exécute 1) tôt après la connexion et 2) chaque fois que le fichier ~/.MacOSX/environment.plist change. L'agent lit ~/.MacOSX/environment.plist et exporte les variables d'environnement de ce fichier vers l'instance launchd de l'utilisateur actuel via la même API utilisée par launchctl setenv et launchctl unsetenv.

Disclaimer: Je n'ai aucun lien avec le développeur ou son projet.

P.S. J'aime le nom (sonne comme "Ends Pain").

22
Big Rich

Sur Mountain Lion, toutes les modifications de /etc/paths et /etc/launchd.conf ne produisent aucun effet!

Les forums de développeurs Apple disent:

"Modifiez le fichier Info.plist du fichier .app lui-même afin qu'il contienne un dictionnaire" LSEnvironment "avec les variables d'environnement souhaitées.

~/.MacOSX/environment.plist n'est plus pris en charge. "

J'ai donc directement modifié le Info.plist de l'application (clic droit sur "AppName.app" (dans ce cas, SourceTree) puis sur "Show package contents").

Show Package Contents

Et j'ai ajouté une nouvelle paire clé/dict appelée:

<key>LSEnvironment</key>
<dict>
     <key>PATH</key>
     <string>/Users/flori/.rvm/gems/Ruby-1.9.3-p362/bin:/Users/flori/.rvm/gems/Ruby-1.9.3-p362@global/bin:/Users/flori/.rvm/rubies/Ruby-1.9.3-p326/bin:/Users/flori/.rvm/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:</string>
</dict>

(voir: Documentation LaunchServicesKeys chez Apple )

Enter image description here

Maintenant, l'application (dans mon cas, Sourcetree) utilise le chemin donné et fonctionne avec Git 1.9.3 :-)

PS: Bien sûr, vous devez ajuster l’entrée Path en fonction de vos besoins spécifiques.

17
Flori

Bien que les réponses ne soient pas "mauvaises", j'en ajouterai une autre: n'effectuez jamais de modifications de variables d'environnement dans OS X qui affectent "tous les processus", ni même en dehors du Shell, pour tous les processus exécutés de manière interactive par un utilisateur donné.

D'après mon expérience, les modifications globales apportées aux variables d'environnement telles que PATH pour tous les processus sont encore plus susceptibles de perturber des choses sous OS X que sous Windows. Raison d'être, de nombreuses applications OS X et autres logiciels (notamment, peut-être, des composants du système d'exploitation lui-même) reposent sur des outils de ligne de commande UNIX sous le capot et assument le comportement des versions de ces outils fournies avec le système, et n'utilisez pas nécessairement des chemins absolus (des commentaires similaires s'appliquent aux bibliothèques chargées dynamiquement et aux variables d'environnement DYLD_ *). Considérez, par exemple, que les réponses les mieux notées aux différentes questions de Stack Overflow sur le remplacement des versions d'interpréteur fournies par OS X telles que Python et Ruby disent généralement "ne le faites pas. "

OS X n'est en réalité pas différent des autres systèmes d'exploitation de type UNIX (par exemple, Linux, FreeBSD et Solaris) à cet égard; La raison la plus probable pour Apple ne fournit pas un moyen facile de le faire est parce que casse des choses. Dans la mesure où Windows n'est pas aussi sujet à ces problèmes, il est dû à deux facteurs: (1) les logiciels Windows ne s'appuient généralement pas sur les outils de ligne de commande autant que les logiciels UNIX, et (2) Microsoft a Un tel historique complet de problèmes de sécurité et d '"enfer de DLL" causés par des modifications qui affectent tous les processus pour lesquels ils ont modifié le comportement du chargement dynamique dans les nouvelles versions de Windows afin de limiter l'impact des options de configuration "globales" telles que PATH.

"Lame" ou pas, vous aurez un système beaucoup plus stable si vous limitez ces modifications à de plus petites portées.

16
Jason T. Miller

Mise à jour (2017-08-04)

À partir de (au moins) macOS 10.12.6 (Sierra), cette méthode semble avoir cessé de fonctionner pour Apache httpd (pour l'option system et pour l'option user de launchctl config). Les autres programmes ne semblent pas être affectés. Il est concevable qu'il s'agisse d'un bogue dans httpd.

Réponse originale

Cela concerne OS X 10.10+ (10.11+ spécifiquement en raison du mode sans racine où /usr/bin n'est plus accessible en écriture).

J'ai lu à plusieurs endroits que l'utilisation de launchctl setenv PATH <new path> pour définir la variable PATH ne fonctionnait pas en raison d'un bogue dans OS X (ce qui semble être vrai par expérience personnelle). J'ai trouvé qu'il y a une autre façon de modifier la PATHapplications non lancées à partir du shell:

Sudo launchctl config user path <new path>

Cette option est documentée dans la page de manuel launchctl:

système de configuration | valeur du paramètre utilisateur

Définit les informations de configuration persistantes pour les domaines launchd (8). Seuls les domaines système et utilisateur peuvent être configurés. L'emplacement du stockage persistant est un détail de l'implémentation et les modifications apportées à ce stockage ne doivent être effectuées que via cette sous-commande. Un redémarrage est requis pour que les modifications apportées via cette sous-commande prennent effet.

[...]

chemin

Définit la variable d'environnement PATH pour tous les services du domaine cible sur la valeur de chaîne. La valeur de chaîne doit être conforme au format indiqué pour la variable d’environnement PATH dans environ (7). Notez que si un service spécifie son propre PATH, la variable d'environnement spécifique au service sera prioritaire.

REMARQUE: Cette fonctionnalité ne peut pas être utilisée pour définir des variables d'environnement générales pour tous les services du domaine. Il est intentionnellement limité à l'environnement variable PATH et rien d'autre pour des raisons de sécurité.

J'ai confirmé que cela fonctionnait avec une application graphique démarrant à partir du Finder (qui utilise getenv pour obtenir PATH). Notez que vous ne devez le faire qu’une seule fois et que les modifications seront persistantes lors des redémarrages.

15
Max Leske

Parfois, toutes les réponses précédentes ne fonctionnent tout simplement pas. Si vous souhaitez avoir accès à une variable système (telle que M2_HOME) dans Eclipse ou dans IntelliJ IDEA, la seule chose qui fonctionne pour moi dans ce cas est la suivante:

D'abord (étape 1), éditez /etc/launchd.conf pour qu'il contienne une ligne comme celle-ci: "valeur VEN de setenv", puis (étape 2) redémarrez.

La simple modification de .bash_profile ne fonctionnera pas car, sous OS X, les applications ne sont pas démarrées comme dans d'autres Unix; ils n'héritent pas des variables Shell du parent. Toutes les autres modifications ne fonctionneront pas pour une raison inconnue de moi. Peut-être que quelqu'un d'autre peut clarifier cela.

15
Bruno Ranschaert

Après avoir traqué le panneau de préférences Variables d'environnement et découvert que le lien était brisé et qu'une recherche sur le site d'Apple semblait indiquer qu'ils l'avaient oubliée ... je suis revenu sur la piste du processus de lancement insaisissable .

Sur mon système (Mac OS X 10.6.8), il apparaît que les variables définies dans environment.plist sont exportées de manière fiable vers des applications lancées à partir de Spotlight (via launchd). Mon problème est que ces vars ne sont pas exportés vers de nouvelles sessions bash dans Terminal. C'est à dire. J'ai le problème opposé comme décrit ici.

REMARQUE: environment.plist ressemble à JSON, pas à XML, comme décrit précédemment

Je pouvais obtenir les applications Spotlight pour voir les vars par édition ~/MacOSX/environment.plist et j'étais capable de forcer les mêmes vars dans une nouvelle session Terminal en ajoutant ce qui suit à mon fichier .profile:

eval $(launchctl export)
13
Russell B

Tous les fichiers de démarrage de Bash - ~/.bashrc, ~/.bash_profile, ~/.profile. Il existe également une sorte de fichier étrange nommé ~/.MacOSX/environment.plist pour les variables d'environnement dans les applications à interface graphique.

10
John Millikin

Voici un moyen très simple de faire ce que vous voulez. Dans mon cas, Gradle devait fonctionner (pour Android Studio).

  • Ouvrez le terminal.
  • Exécutez la commande suivante:

    Sudo nano /etc/paths ou Sudo vim /etc/paths

  • Entrez votre mot de passe lorsque vous y êtes invité.

  • Allez au bas du fichier et entrez le chemin que vous souhaitez ajouter.
  • Frappé Control + X quitter.
  • Entrez "Y" pour enregistrer le tampon modifié.
  • Ouvrez une nouvelle fenêtre de terminal puis tapez:

    echo $PATH

Vous devriez voir le nouveau chemin ajouté à la fin du PATH.

J'ai eu ces détails de ce post:

Ajoutez au PATH sous Mac OS X 10.8 Mountain Lion et plus

10
wired00

Tout comme la réponse de Matt Curtis, j'ai défini les variables d'environnement via launchctl, mais je l'ai enveloppée dans une fonction appelée export, de sorte que chaque fois que j'exporte une variable comme d'habitude dans mon fichier .bash_profile, elle est également définie par launchctl. Voici ce que je fais:

  1. Mon .bash_profile consiste uniquement en une ligne, (ceci est juste une préférence personnelle).

    source .bashrc
    
  2. Mon .bashrc a ceci:

    function export()
    {
        builtin export "$@"
        if [[ ${#@} -eq 1 && "${@//[^=]/}" ]]
        then
            launchctl setenv "${@%%=*}" "${@#*=}"
        Elif [[ ! "${@//[^ ]/}" ]]
        then
            launchctl setenv "${@}" "${!@}"
        fi
    }
    
    export -f export
    
  3. Ce qui précède surchargera le "export" intégré dans Bash et exportera tout normalement (vous remarquerez que j’exporte "export"!), Puis définissez-les correctement pour les environnements d’application OS X via launchctl, que vous utilisiez l’un des éléments suivants:

    export LC_CTYPE=en_US.UTF-8
    # ~$ launchctl getenv LC_CTYPE
    # en_US.UTF-8
    PATH="/usr/local/bin:${PATH}"
    PATH="/usr/local/opt/coreutils/libexec/gnubin:${PATH}"
    export PATH
    # ~$ launchctl getenv PATH
    # /usr/local/opt/coreutils/libexec/gnubin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin
    export CXX_FLAGS="-mmacosx-version-min=10.9"
    # ~$ launchctl getenv CXX_FLAGS
    # -mmacosx-version-min=10.9
    
  4. De cette façon, je n'ai pas à envoyer chaque variable à launchctl à chaque fois et je peux simplement configurer mon fichier .bash_profile/.bashrc comme je le souhaite. Ouvrez une fenêtre de terminal, vérifiez les variables d’environnement qui vous intéressent avec launchctl getenv myVar, modifiez quelque chose dans votre profil .bash_profile/.bashrc, fermez la fenêtre de terminal et ouvrez-la à nouveau, vérifiez à nouveau la variable avec launchctl, et voila, c'est changé.

  5. Encore une fois, à l'instar des autres solutions pour le monde des lions post-montagne, pour que de nouvelles variables d'environnement soient disponibles pour les applications, vous devez les lancer ou les relancer après le changement.

10
courtlandj

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

Voici:

http://www.Apple.com/downloads/macosx/system_disk_utilities/environmentvariablepreferencepane.html

8
Tom Teman

Pour être concis et clair sur ce que chaque fichier est destiné à

  • ~/.profile est recherché à chaque lancement de Terminal.app
  • ~/.bashrc est l'endroit où "traditionnellement" toutes les instructions d'exportation pour l'environnement Bash sont définies
  • /etc/paths est le fichier principal de Mac OS contenant la liste des chemins par défaut permettant de créer la variable d'environnement PATH pour tous les utilisateurs.
  • /etc/paths.d/ contient des fichiers contenant des chemins de recherche supplémentaires

Les programmes non-terminaux n'héritent pas des variables PATH et MANPATH à l'échelle du système comme le fait votre terminal! Pour définir l'environnement pour tous les processus lancés par un utilisateur spécifique, afin de rendre les variables d'environnement disponibles pour les applications d'interface graphique Mac OS X, ces variables doivent être définies dans votre ~/.MacOSX/environment.plist (FAQ technique Apple QA1067).

Utilisez la ligne de commande suivante pour synchroniser votre environment.plist avec /etc/paths:

defaults write $HOME/.MacOSX/environment PATH "$(tr '\n' ':' </etc/paths)"
7
Claudio Floreani

La variable $PATH est également soumise à path_helper, qui utilise à son tour le fichier /etc/paths et les fichiers de /etc/paths.d.

Vous trouverez une description plus détaillée dans PATH et autres problèmes d'environnement dans Leopard (2008-11)

5
Nicolas Wu

/etc/launchd.conf n'est pas utilisé sous OS X v10.10 (Yosemite), OS X v10.11 (El Capitan), macOS v10.12 (Sierra) ou macOS v10.13 (High Sierra).


Depuis la page de manuel launchctl:

/etc/launchd.conf file is no longer consulted for subcommands to run during early boot time;
this functionality was removed for security considerations.

La méthode décrite dans cette réponse Demander une réponse fonctionne pour moi (après un redémarrage): applications lancées à partir du Dock ou de Spotlight hériter des variables d'environnement que j'ai définies dans ~/Library/LaunchAgents/my.startup.plist. (Dans mon cas, j'avais besoin de définir LANG, sur en_US.UTF-8, pour un plugin Sublime Text.)

4
David

Pour une modification mono-utilisateur, utilisez ~/.profile parmi ceux que vous avez répertoriés. Le lien suivant explique quand les différents fichiers sont lus par Bash.

http://telin.ugent.be/~slippens/drupal/bashrc_and_others

Si vous souhaitez définir la variable d'environnement pour les applications graphiques, vous avez besoin du fichier ~/.MacOSX/environment.plist.

3
mmaibaum

C'est simple:

Editez ~/.profile et mettez vos variables comme suit

$ vim ~/.profile

En fichier mis:

MY_ENV_VAR = valeur

  1. Enregistrer (: wq)

  2. Redémarrez le terminal (quittez et rouvrez-le)

  3. Assurez-vous que tout va bien:

$ echo $ MY_ENV_VAR

$ valeur


3
Fernando Martínez

Une chose à noter en plus des approches suggérées est que, dans OS X 10.5 (Leopard) au moins, les variables définies dans launchd.conf seront fusionnées avec les paramètres définis dans .profile. Je suppose que cela est probablement valable pour les paramètres de ~/.MacOSX/environment.plist aussi, mais je n’ai pas vérifié.

3
MiB

Configurez votre variable d'environnement PATH sous Mac OS

Ouvrez le programme Terminal (celui-ci se trouve par défaut dans votre dossier Applications/Utilitaires). Lancer la commande suivante

touch ~/.bash_profile; open ~/.bash_profile

Cela ouvrira le fichier dans votre éditeur de texte par défaut.

Pour Android SDK à titre d'exemple:

Vous devez ajouter le chemin d'accès à votre répertoire _ outils de plate-forme et d'outils de SDK Android. Dans mon exemple, j'utiliserai "/ Development/Android-sdk-macosx" comme répertoire d'installation du SDK. Ajoutez la ligne suivante:

export PATH=${PATH}:/Development/Android-sdk-macosx/platform-tools:/Development/Android-sdk-macosx/tools

Enregistrez le fichier et quittez l'éditeur de texte. Exécutez votre .bash_profile pour mettre à jour votre PATH:

source ~/.bash_profile

Maintenant, chaque fois que vous ouvrez le programme Terminal, votre PATH inclura le Android SDK.

3
Charaf JRA

Eh bien, je ne suis pas sûr des fichiers /etc/paths et ~/.MacOSX/environment.plist. Ceux sont nouveaux.

Mais avec Bash, vous devez savoir que .bashrc est exécuté à chaque nouvelle invocation de shell et que .bash_profile n’est exécuté qu’une fois au démarrage.

Je ne sais pas combien de fois cela se produit avec Mac OS X. Je pense que la distinction a été brisée avec le système de fenêtres qui lance tout.

Personnellement, j'élimine la confusion en créant un fichier .bashrc avec tout ce dont j'ai besoin et en faisant ensuite:

ln -s .bashrc .bash_profile
3
mike511

Vient de faire cela vraiment facile et rapide. Commencez par créer un ~/.bash_profile depuis le terminal:

touch .bash_profile

ensuite

open -a TextEdit.app .bash_profile

ajouter

export Tomcat_HOME=/Library/Tomcat/Home

enregistrer le document et vous avez terminé.

2
CodeOverRide

Coques de connexion

/etc/profile

Le shell exécute d’abord les commandes du fichier /etc/profile. Un utilisateur utilisant des privilèges root peut configurer ce fichier pour établir des caractéristiques par défaut pour l'ensemble du système pour les utilisateurs exécutant Bash.

.bash_profile
.bash_login
.profile

Ensuite, le shell recherche ~/.bash_profile, ~/.bash_login et ~/.profile (~/est un raccourci pour votre répertoire personnel), dans cet ordre, en exécutant les commandes du premier de ces fichiers. trouve. Vous pouvez placer des commandes dans l’un de ces fichiers pour remplacer les valeurs par défaut définies dans /etc/profile. Un shell s'exécutant sur un terminal virtuel n'exécute pas de commandes dans ces fichiers.

.bash_logout

Lorsque vous vous déconnectez, bash exécute les commandes du fichier ~/.bash_logout. Ce fichier contient souvent des commandes qui nettoient après une session, telles que celles qui suppriment des fichiers temporaires.

Coques non connectées interactives

/etc/bashrc

Bien que non directement appelé par bash, de nombreux fichiers ~/.bashrc appellent /etc/bashrc. Cette configuration permet à un utilisateur travaillant avec des privilèges root d’établir des caractéristiques par défaut pour l’ensemble du système pour les shells bash non-login.

.bashrc

Un shell interactif non-login exécute des commandes dans le fichier ~/.bashrc. Généralement, un fichier de démarrage pour un shell de connexion, tel que .bash_profile, exécute ce fichier. Par conséquent, les shells de connexion et non connectés exécutent les commandes dans .bashrc.

Comme les commandes de .bashrc peuvent être exécutées plusieurs fois et que les sous-shell héritent des variables exportées, il est judicieux de placer les commandes qui s'ajoutent aux variables existantes dans le fichier .bash_profile.

2
Koray Tugay

Toute la magie sur iOS va uniquement avec l'utilisation de source avec le fichier, dans lequel vous exportez vos variables d'environnement.

Par exemple:

Vous pouvez créer un fichier comme ceci:

export bim=fooo
export bom=bar

Enregistrez ce fichier sous le nom bimbom.env et faites source ./bimbom.ev. Voilá, vous avez vos variables d'environnement.

Vérifiez-les avec:

echo $bim
2
suther

Il y a deux types d'obus en jeu ici.

  • Non-login: .bashrc est rechargé chaque fois que vous démarrez une nouvelle copie de Bash
  • Connexion: le fichier .profile n'est chargé que lorsque vous vous connectez ou indiquez explicitement à Bash de le charger et de l'utiliser comme shell de connexion.

Il est important de comprendre ici qu'avec Bash, le fichier .bashrc n'est lu que par un shell interactif et non connecté, et vous constaterez que les utilisateurs chargent souvent .bashrc dans .bash_profile à surmonter. cette limitation.

Maintenant que vous avez compris les notions de base, voyons comment je vous conseillerais de le configurer.

  • .profile: le créer inexistant. Mettez votre configuration PATH là-bas.
  • .bashrc: crée si non existant. Mettez tous vos alias et méthodes personnalisées ici.
  • .bash_profile: crée si non existant. Mettez ce qui suit dedans.

.bash_file:

#!/bin/bash
source ~/.profile # Get the PATH settings
source ~/.bashrc  # Get Aliases and Functions
#
2
ZOXIS

C'est assez simple. Editez le fichier .profile (vi, nano , fichier Sublime ou un autre éditeur de texte). Vous pouvez le trouver dans le répertoire ~/ (répertoire utilisateur) et définir comme suit:

export MY_VAR=[your value here]

Exemple avec Java home:

export Java_HOME=/Library/Java/JavaVirtualMachines/current

Enregistrez-le et revenez au terminal.

Vous pouvez le recharger avec:

source .profile

Ou fermez et ouvrez la fenêtre de votre terminal.

1
francois.robert

Pour Bash, essayez d’ajouter vos variables d’environnement au fichier /etc/profile afin de les rendre accessibles à tous les utilisateurs. Pas besoin de redémarrer, il suffit de démarrer une nouvelle session Terminal.

1
Rabi