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:
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).
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 .
Ouvrir une invite de terminal
Tapez Sudo vi /etc/launchd.conf
(note: ce fichier peut ne pas exister)
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
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.
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.
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.
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
.
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
.
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).
Faire:
vim ~/.bash_profile
Le fichier peut ne pas exister (sinon, vous pouvez simplement le créer).
Tapez ceci et enregistrez le fichier:
export PATH=$PATH:YOUR_PATH_HERE
Courir
source ~/.bash_profile
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é.
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").
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
").
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 )
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.
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.
À 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.
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 PATH
applications 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.
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.
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)
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.
Voici un moyen très simple de faire ce que vous voulez. Dans mon cas, Gradle devait fonctionner (pour Android Studio).
Exécutez la commande suivante:
Sudo nano /etc/paths
ou Sudo vim /etc/paths
Entrez votre mot de passe lorsque vous y êtes invité.
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:
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:
Mon .bash_profile consiste uniquement en une ligne, (ceci est juste une préférence personnelle).
source .bashrc
Mon .bashrc a ceci:
function export()
{
builtin export "$@"
if [[ ${#@} -eq 1 && "${@//[^=]/}" ]]
then
launchctl setenv "${@%%=*}" "${@#*=}"
Elif [[ ! "${@//[^ ]/}" ]]
then
launchctl setenv "${@}" "${!@}"
fi
}
export -f export
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
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é.
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.
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
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émentairesLes 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)"
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)
/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.)
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.
C'est simple:
Editez ~/.profile et mettez vos variables comme suit
$ vim ~/.profile
En fichier mis:
MY_ENV_VAR = valeur
Enregistrer (: wq)
Redémarrez le terminal (quittez et rouvrez-le)
Assurez-vous que tout va bien:
$ echo $ MY_ENV_VAR
$ valeur
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é.
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.
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
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é.
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
.
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
Il y a deux types d'obus en jeu ici.
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.
.bash_file:
#!/bin/bash
source ~/.profile # Get the PATH settings
source ~/.bashrc # Get Aliases and Functions
#
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.
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.