Je me demande où un nouveau chemin doit être ajouté au PATH
variables d'environnement. Je sais que cela peut être accompli en éditant .bashrc
(par exemple), mais la façon de procéder n'est pas claire.
De cette façon :
export PATH=~/opt/bin:$PATH
ou ça ?
export PATH=$PATH:~/opt/bin
Réponse acceptée :
Les trucs simples
PATH=$PATH:~/opt/bin
ou
PATH=~/opt/bin:$PATH
selon que vous souhaitez ajouter ~/opt/bin
à la fin (à rechercher après tous les autres répertoires, au cas où il existe un programme du même nom dans plusieurs répertoires) ou au début (à rechercher avant tous les autres répertoires).
Vous pouvez ajouter plusieurs entrées en même temps. PATH=$PATH:~/opt/bin:~/opt/node/bin
ou des variations sur le travail de commande très bien. Ne mettez pas export
au début de la ligne car il a des complications supplémentaires (voir ci-dessous sous "Notes sur les shells autres que bash").
Si votre PATH
est construit par de nombreux composants différents, vous pourriez vous retrouver avec des entrées en double. Voir Comment ajouter le chemin du répertoire personnel à découvrir par Unix quelle commande ? et Supprimez les entrées $PATH en double avec la commande awk pour éviter d'ajouter des doublons ou de les supprimer.
Certaines distributions mettent automatiquement ~/bin
dans votre PATH s'il existe, soit dit en passant.
Où le mettre
Mettez la ligne pour modifier PATH
dans ~/.profile
, ou dans ~/.bash_profile
si c'est ce que vous avez.
Notez que ~/.bash_rc
n'est lu par aucun programme, et ~/.bashrc
est le fichier de configuration des instances interactives de bash. Vous ne devez pas définir de variables d'environnement dans ~/.bashrc
. Le bon endroit pour définir des variables d'environnement telles que PATH
est ~/.profile
(ou ~/.bash_profile
si vous ne vous souciez pas des shells autres que bash). Voir Quelle est la différence entre eux et lequel dois-je utiliser ?
Ne le mettez pas dans /etc/environment
ou ~/.pam_environment
:ce ne sont pas des fichiers shell, vous ne pouvez pas utiliser de substitutions comme $PATH
là-dedans. Dans ces fichiers, vous pouvez uniquement remplacer une variable, pas y ajouter.
Complications potentielles dans certains scripts système
Vous n'avez pas besoin d'export
si la variable est déjà dans l'environnement :tout changement de la valeur de la variable est répercuté dans l'environnement.¹ PATH
est à peu près toujours dans l'environnement ; tous les systèmes Unix le définissent très tôt (généralement dans le tout premier processus, en fait).
Au moment de la connexion, vous pouvez compter sur PATH
étant déjà dans l'environnement et contenant déjà certains répertoires système. Si vous écrivez un script qui peut être exécuté tôt lors de la configuration d'un type d'environnement virtuel, vous devrez peut-être vous assurer que PATH
est non vide et exporté :si PATH
n'est toujours pas défini, alors quelque chose comme PATH=$PATH:/some/directory
définirait PATH
vers :/some/directory
, et le composant vide au début signifie le répertoire courant (comme .:/some/directory
).
if [ -z "${PATH-}" ]; then export PATH=/usr/local/bin:/usr/bin:/bin; fi
Remarques sur les shells autres que bash
En bash, ksh et zsh, export
est une syntaxe spéciale, et PATH=~/opt/bin:$PATH
et export PATH=~/opt/bin:$PATH
faire la bonne chose même. Dans d'autres shells de style Bourne/POSIX tels que dash (qui est /bin/sh
sur de nombreux systèmes), export
est analysé comme une commande ordinaire, ce qui implique deux différences :
~
n'est analysé qu'au début d'un mot, sauf dans les affectations (voir Comment ajouter le chemin du répertoire personnel à découvrir par Unix avec quelle commande ? pour plus de détails) ;$PATH
en dehors des guillemets doubles saute siPATH
contient des espaces ou[*?
.
Ainsi, dans des shells comme dash, définit export PATH=~/opt/bin:$PATH
PATH
à la chaîne littérale ~/opt/bin/:
suivi de la valeur de PATH
jusqu'au premier espace. PATH=~/opt/bin:$PATH
(une mission simple) ne nécessite pas de guillemets et fait ce qu'il faut. Si vous souhaitez utiliser export
dans un script portable, il faut écrire export PATH="$HOME/opt/bin:$PATH"
, ou PATH=~/opt/bin:$PATH; export PATH
(ou PATH=$HOME/opt/bin:$PATH; export PATH
pour la portabilité même au shell Bourne qui n'acceptait pas export var=value
et n'a pas fait d'expansion de tilde).
¹ Ce n'était pas vrai dans les shells Bourne (comme dans le shell Bourne actuel, pas dans les shells modernes de style POSIX), mais il est très peu probable que vous rencontriez des shells aussi anciens de nos jours.