Parcours 0 — Avant de commencer · leçon gratuite · 14 min

Variables d’environnement et PATH

Pourquoi « command not found » alors que tu viens d’installer le programme ? La réponse tient dans une variable.

Objectifs

  • Expliquer ce qu’est une variable d’environnement
  • Comprendre le rôle du PATH
  • Savoir pourquoi on met les secrets dans des variables plutôt que dans le code

Une variable d'environnement est un petit réglage nommé, disponible pour tous les programmes que tu lances depuis le terminal. Un nom en majuscules, une valeur texte : HOME=/Users/lea, EDITOR=nano, NODE_ENV=production.

La plus importante s'appelle PATH. C'est la liste des dossiers dans lesquels le shell cherche les programmes quand tu tapes une commande. Quand tu tapes claude, le shell parcourt chaque dossier du PATH et cherche un fichier exécutable nommé claude. S'il n'en trouve aucun : command not found.

D'où la règle : installer un programme ne suffit pas, il faut qu'il soit dans un dossier du PATH. Les installeurs sérieux s'en chargent (celui de Claude Code ajoute ~/.local/bin), mais le terminal ne relit son PATH qu'au démarrage. C'est pour ça qu'après une installation, on ferme et on rouvre le terminal. Neuf « command not found » sur dix se règlent comme ça.

Les variables vivent dans un processus (voir la leçon suivante) et sont héritées par les programmes qu'il lance. Ton shell a un PATH ; quand il lance Claude Code, Claude Code hérite du même PATH ; quand Claude Code lance npm test, npm hérite encore du même. Une variable définie dans un terminal n'existe pas dans un autre terminal ouvert à côté.

Pour qu'une variable existe à chaque ouverture de terminal, on la définit dans un fichier de configuration du shell, lu au démarrage :

ShellFichier
zsh (macOS)~/.zshrc
bash (Linux)~/.bashrc (parfois ~/.bash_profile)
PowerShell$PROFILE (tape echo $PROFILE pour voir son chemin)

Une ligne typique dans ~/.zshrc : export PATH="$HOME/.local/bin:$PATH" = « ajoute ~/.local/bin au début du PATH existant ».

$ echo $HOME
/Users/lea
$ echo $PATH
/Users/lea/.local/bin:/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin
$ which claude
/Users/lea/.local/bin/claude
$ export MON_TEST=bonjour
$ echo $MON_TEST
bonjour
PS> echo $env:USERPROFILE
C:\Users\lea
PS> $env:Path -split ';'
C:\Users\lea\.local\bin
C:\Windows\system32
…
PS> Get-Command claude
CommandType  Name        Source
Application  claude.exe  C:\Users\lea\.local\bin\claude.exe
PS> $env:MON_TEST = "bonjour"
PS> echo $env:MON_TEST
bonjour
$ echo $HOME
/home/lea
$ echo $PATH
/home/lea/.local/bin:/usr/local/bin:/usr/bin:/bin
$ which claude
/home/lea/.local/bin/claude

which (macOS/Linux) et Get-Command (Windows) répondent à la question « quand je tape ce mot, quel fichier est lancé ? ». C'est l'outil de diagnostic n°1 pour les problèmes d'installation.

Claude Code lit certaines variables d'environnement pour se configurer (par exemple ANTHROPIC_API_KEY si tu utilises une clé plutôt qu'un abonnement, ou CLAUDE_CODE_GIT_BASH_PATH sur Windows). Et surtout : Claude Code hérite de ton PATH. Si npm n'est pas trouvable dans ton terminal, Claude Code ne le trouvera pas non plus quand il voudra lancer les tests. Un terminal sain = un Claude Code qui travaille bien.

Les secrets vont dans des variables, jamais dans le code

Une clé d'API (le mot de passe qui permet à ton site d'envoyer des e-mails, d'encaisser un paiement…) ne doit jamais être écrite dans un fichier de code : le code se partage, se publie, se copie. À la place, on la met dans une variable d'environnement, et le code lit la variable.

En développement, on regroupe ces variables dans un fichier nommé .env à la racine du projet :

STRIPE_SECRET_KEY=sk_test_51Hxxxxxxxxxxxxx
DATABASE_URL=postgres://user:motdepasse@localhost:5432/monsite

et on ajoute .env dans .gitignore (leçon Git) pour qu'il ne parte jamais sur internet. Le parcours 24 y consacre un module entier ; retiens déjà le principe.

Erreurs courantes

command not found: claude (juste après l’installation)

Le terminal a été ouvert avant l’installation : son PATH ne contient pas encore le dossier du programme.

Ferme complètement le terminal (toutes les fenêtres) et rouvre-le. Si ça persiste : which claude / Get-Command claude, puis suis la leçon de diagnostic d’installation.

Ma variable disparaît quand j’ouvre un nouveau terminal

export définit la variable pour la session courante seulement.

Ajoute la ligne export dans ~/.zshrc (ou ~/.bashrc, ou $PROFILE), puis rouvre le terminal.

À retenir

  • Une variable d’environnement = un réglage nommé, hérité par tous les programmes lancés depuis le terminal.
  • PATH = la liste des dossiers où le shell cherche les commandes. Pas dans le PATH → « command not found ».
  • Après une installation, ferme et rouvre le terminal : le PATH n’est lu qu’au démarrage.
  • Les secrets vont dans .env (ignoré par Git), jamais dans le code.