102 votes

Comment ajouter une variable d'environnement permanente dans zsh

J'ai parcouru l'Internet et je n'ai pas réussi à trouver une solution pour ajouter de façon permanente une variable d'environnement, en particulier lorsque mon système d'exploitation est MacOS Mojave (10.14). Il semble qu'il y ait beaucoup de tutoriels pour les versions antérieures de l'OS, mais aucun pour celle-ci. Il semble également que toutes les anciennes méthodes soient devenues obsolètes.

Je veux ajouter une variable d'environnement ENV_VAR=12345 sur mon Mac, afin que je puisse l'importer dans un module Python en utilisant os.environ['ENV_VAR']

Le tutoriel le plus pertinent que j'ai trouvé est este mais ça ne fait pas l'affaire pour moi. Beaucoup d'autres vous disent comment ajouter temporairement des variables d'environnement à bash, mais je ne pense pas que ce soit suffisant. Je veux que l'ajout soit présent si vous redémarrez le terminal.

Pouvez-vous fournir un court tutoriel ou m'indiquer le tutoriel correct/moderne ?

UPDATE : J'aurais dû mentionner que j'utilise zsh . C'était la clé.

117voto

slm Points 4018

Bash

Comme Bash est généralement le shell par défaut, vous pouvez ouvrir ce fichier dans votre répertoire personnel :

$ vim ~/.bash_profile

Et ajoutez votre variable à ce fichier :

export ENV_VAR=12345

Vous pouvez le faire sans même avoir à modifier ce fichier si vous le souhaitez, en utilisant la ligne unique suivante :

$ echo 'export ENV_VAR=12345' >> ~/.bash_profile

Et puis confirmez comme ça :

$ cat ~/.bash_profile
for i in ~/.bash_profile.d/[0-9]*; do
  . "$i"
done
export ENV_VAR=12345

Après avoir fait ce qui précède, si vous ouvrez un nouveau terminal, vous devriez voir que la variable d'environnement a été définie :

$ echo $ENV_VAR
12345

Zsh

Si vous constatez que vous utilisez un shell alternatif tel que zsh qui utilise un ensemble différent de fichiers de configuration maintenus dans votre répertoire personnel, ~ . Heureusement, la syntaxe des changements est fondamentalement la même, juste des fichiers différents. Vous pouvez donc ajouter l'exemple ci-dessus à ce fichier à la place :

$ echo 'export ENV_VAR=12345' >> ~/.zshenv

Et ensuite, quand vous lancez une zsh :

$ echo $ENV_VAR
12345

Références

45voto

Guillermo Garcia Points 331

Tout d'abord, exécutez dans un terminal avec zsh (Z Shell) :

echo 'export ENV_VAR=12345' >> ~/.zshenv

Puis, recharger les changements :

source ~/.zshenv

Enfin, vérifiez si votre nouvelle variable est définie :

echo $ENV_VAR

Note : Par norme, le .zshenv ne doit contenir que des commandes de paramétrage de variables d'environnement. .zshenv provient de toutes les invocations de l'interpréteur de commandes, et persiste donc même après le redémarrage de votre machine.

4voto

Khb Points 1002

Les autres solutions décrivent comment définir une variable d'environnement dans toutes vos instances du shell zsh/bash. Mais elles ne définissent pas une ENV permanente qui est disponible partout dans MacOS, y compris dans chaque programme lancé.

Par exemple, si vous définissez ENV_VAR=1 votre .zshrc mais que vous lancez Python directement sans le lancer à partir d'un shell, alors tout ce qui est défini dans votre fichier .zshrc ne serait pas disponible en os.environ['...'] .

Pour résoudre ce problème, vous pouvez définir une variable d'environnement véritablement globale sur MacOS au niveau du système en utilisant la commande suivante launchctl comme ça :

launchctl setenv "ENV_VAR" "12345"

Après avoir exécuté cela, chaque programme nouvellement lancé verra l'icône ENV_VAR y compris les instances du shell ainsi que les éléments lancés sans shell. Vous devrez fermer votre application terminal et la rouvrir pour qu'elle soit dans votre shell. Elle n'apparaîtra pas non plus dans les sessions ssh, qui ne sont pas lancées par launchd comme les programmes GUI.

Mise à jour : Il semble que ce problème ne persiste pas lors des redémarrages du système. Vous pouvez trouver une discussion à ce sujet aquí . Il est amusant de constater qu'une solution décente à ce problème consiste simplement à mettre launchctl setenv ... dans votre coquille .zshenv o .bash_profile . Mais cela signifie que vous devrez lancer un shell avant que les variables globales ne soient définies, afin que vous puissiez en voir davantage. des solutions robustes impliquant la création d'une nouvelle tâche de lancement ici .

2voto

blizzrdof77 Points 195

Pour ce que ça vaut, j'utilise este coque portable fonction pour rapidement set & ajouter définitivement environment variables .

J'utilise principalement zsh mais il peut être facilement adapté pour bash ou autre POSIX -conformité des coquilles.

# -----------------------------------------
#  Create permanent environment variable
#
#  $1 - variable name
#  $2 - variable definition
#  @requires: '~/.zshrc' or '~/.bashrc'
# -----------------------------------------
function new_env_var {
  local detected_shell="$(ps -o comm= -p $$)"
  local rcfile=$(echo "${HOME}/.${detected_shell//-/}rc")
  if [[ -f $rcfile ]]; then
    local var_name; local var_val
    if [ -z "$1" ]; then
      echo "variable name (e.g. 'NEW_VAR' for '\$NEW_VAR'):"; read var_name
    else
      var_name=$1
    fi
    if [ -z "$2" ]; then
      echo "variable definition:"; read var_val
    else
      local s2 var_val="${@//${var_name}/}"
      until s2="${var_val#[   ]}"; [ "$s2" = "$var_val" ]; do var_val="$s2"; done
    fi
    echo "export $var_name=\"$var_val\"" >> $rcfile; export $var_name="$var_val"
  else
    echo "No $detected_shell runcom file found. Please make sure $rcfile exists."
  fi
}

Vous pouvez l'utiliser comme suit :     new_env_var MY_ENV_VAR 9,999

2voto

Topgyal Gurung Points 1

Montre tous les fichiers cachés comme .bash_profile et .zshrc $ ls -a

À partir de MacOS Catalina, MacOS utilise zsh au lieu de bash pour les comptes nouvellement créés.

Vérifiez quel shell fonctionne :

$ echo $SHELL
/usr/zsh

$ cd $HOME
$ open -e .zshrc

ou si vous utilisez vim

$ vi .zshrc

Puis ajoutez-le comme ceci

$ export my_var="/path/where/it/exists"
$ export PATH=$PATH:/$my_var/bin

Par exemple, si vous avez installé une application nommée : myapp dans /Applications Puis

export MYAPP_HOME=/Applications/myapp
export PATH=$PATH:$MYAPP_HOME/bin

ou un raccourci

export PATH=${PATH}:/Applications/myapp/bin

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