Comment ajouter un répertoire au PATH?

734

Comment puis-je ajouter un répertoire à $PATHdans Ubuntu et rendre les modifications permanentes?

justingrif
la source
2
help.ubuntu.com/community/EnvironmentVariables Il y a tout ce que vous devez savoir. J'ai découvert qu'une grande partie de la saisie était incorrecte ou du moins que la méthode n'était pas suggérée. C'est une excellente information qui vous permettra de déterminer où modifier votre variable d'environnement en fonction de la raison pour laquelle vous le faites et comment le faire sans tout bousiller (comme je l'ai fait en suivant certains des mauvais conseils susmentionnés). A bientôt et merci pour tout le poisson!
Bus42

Réponses:

455

Utiliser ~ / .profile pour définir $ PATH

Un chemin d'accès défini .bash_profilene sera défini que dans un shell de connexion bash ( bash -l). Si vous indiquez votre chemin, .profileil sera disponible pour votre session de bureau complète. Cela signifie que même la métacité l'utilisera.

Par exemple ~/.profile:

if [ -d "$HOME/bin" ] ; then
  PATH="$PATH:$HOME/bin"
fi

En passant, vous pouvez vérifier la variable PATH d'un processus en regardant son environnement dans /proc/[pid]/environ(remplacez [pid] par le nombre à partir de ps axf). Par exemple utilisergrep -z "^PATH" /proc/[pid]/environ

Remarque:

bashen tant que shell de connexion ne pas analyser .profilesi l'un .bash_profileou l' autre .bash_loginexiste. De man bash:

il recherche ~ / .bash_profile, ~ / .bash_login et ~ / .profile, dans cet ordre, puis lit et exécute les commandes de la première qui existe et qui est lisible.

Consultez les réponses ci-dessous pour obtenir des informations sur les shells interactifs autres que les utilisateurs .pam_environment, ou .bashrcpour les shells interactifs, ou définissez la valeur de manière globale pour tous les utilisateurs en insérant un script /etc/profile.d/ou /etc/X11/Xsession.d/en affectant leur impact sur la session des gestionnaires d'affichage.

ko-dos
la source
5
Cool, ça a fonctionné. J'ai vu où il va ajouter automatiquement le répertoire bin si je le fais, alors je l'ai simplement utilisé à la place de scripts. TY.
Justingrif
5
Sur Xbunutu, .profile n'est pas exécuté, je l'ai donc mis dans .bashrc et cela fonctionne.
tekumara
13
Cette documentation est très bien faite: Documentation officielle sur la variable d'environnement . Pensez à le lire (pour ne pas dire que la dernière version des règles a été mise à jour pour ajouter des valeurs à la variable d'environnement).
Michele
3
Où dans .profile ajoutons-nous le chemin ??
Vineet Kaushik
3
Je n'ai toujours aucune idée où ajouter ma partie de chemin supplémentaire. J'ai besoin d'ajouter le SDK Android à mon chemin ... PATH="$HOME/bin:$PATH"Alors je l'ajoute?
Jamie Hutber
305

Editez .bashrcdans votre répertoire personnel et ajoutez la ligne suivante:

export PATH="/path/to/dir:$PATH"

Vous devrez vous .bashrcconnecter à votre compte ou vous déconnecter / vous connecter (ou redémarrer le terminal) pour que les modifications prennent effet. Pour trouver votre source .bashrc, tapez simplement

$ source ~/.bashrc
Ophidien
la source
3
Comment vous "source .bashrc"? Comment faites-vous "redémarrer le terminal"?
isomorphismes
3
En bas c'est simplement '. .bashrc '
Ophidian
1
Je supposais que vous étiez dans votre répertoire personnel. puisque c’est là que se trouve le .bashrc que vous voulez éditer.
Ophidian
21
.bashrcn’est pas le bon endroit pour définir des variables d’environnement. Ils devraient aller .profileou .pam_environment. Voir mywiki.wooledge.org/DotFiles
geirha
4
@LaoTzu . .bashrcpas .bashrc:) ou source .bashrcd'ailleurs
Znarkus
121

L'emplacement recommandé pour définir des variables d'environnement permanentes à l'échelle du système s'appliquant à tous les utilisateurs est le suivant:

/etc/environment

(qui est où la valeur par défaut PATHest définie)

Cela fonctionnera dans le bureau ou la console, gnome-terminal ou TTY, beau temps mauvais temps;)

  • Pour éditer, appuyez sur Alt+ F2et tapez:

    gksudo gedit /etc/environment
    

    (ou ouvrez le fichier en utilisant sudodans votre éditeur de texte préféré)

Pour effectuer des changements, exécutez . /etc/environment. Comme ce fichier n'est qu'un simple script, il s'exécutera et affectera le nouveau chemin d'accès à la PATHvariable d'environnement. Pour vérifier exécuter env et voir la PATHvaleur dans la liste.

Apparenté, relié, connexe:

ish
la source
6
et vous devez ensuite redémarrer pour que les modifications prennent effet ...
Lee
2
C'est exactement ce dont j'avais besoin. Mise en service d'une image vm jetable via vagrant et nécessaire pour ajouter un nœud et npm au chemin.
Austin Pray
7
Pour prendre en compte les modifications en vigueur. / etc / environement (oui, dot, un espace et / etc / environment). Comme ce fichier n'est qu'un simple script, il s'exécutera et affectera le nouveau chemin d'accès à la variable d'environnement PATH. Pour vérifier l'exécution env et voir la valeur PATH dans la liste.
WindRider
1
Je devais courir source /etc/environmentpour recharger les changements
JohnnyAW
@JohnnyAW: source est équivalent au point initial, voir par exemple en.wikipedia.org/wiki/Source_(command) .
Roland Sarrazin
59

Je pense que la manière canonique dans Ubuntu est la suivante:

  • créer un nouveau fichier sous /etc/profile.d/

    sudo vi /etc/profile.d/SCRIPT_NAME.sh
    
  • ajouter là:

    export PATH="YOUR_PATH_WITHOUT_TRAILING_SLASH:$PATH"
    
  • et lui donner la permission d'exécution

    sudo chmod a+x /etc/profile.d/SCRIPT_NAME.sh
    
woto
la source
20
Il est généralement plus sûr d’ajouter votre chemin personnalisé à la fin de PATH au lieu du début. Cela évite de remplacer accidentellement des commandes système avec vos programmes (ou les programmes malveillants de quelqu'un d'autre). Cela évite également beaucoup de confusion lorsque quelqu'un d'autre travaille sur votre système (ou vous conseille) et qu'il obtient des résultats inattendus des commandes que vous avez "remplacées".
Joe
47

Pour les débutants complets (comme moi) qui sont plus à l'aise avec l'interface graphique:

  1. Ouvrez votre $HOMEdossier.
  2. Sélectionnez AfficherAfficher les fichiers cachés ou appuyez sur Ctrl+ H.
  3. Faites un clic droit sur .profileet cliquez sur Ouvrir avec l'éditeur de texte .
  4. Faites défiler vers le bas et ajoutez PATH="$PATH:/my/path/foo".
  5. Sauver.
  6. Déconnectez-vous et reconnectez-vous pour appliquer les modifications (laissez Ubuntu se charger réellement .profile).
dain
la source
4
La modification du fichier .profile n’est plus recommandée. Vous pouvez toujours utiliser cette méthode pour modifier le fichier .pam_environment. Consultez
PulsarBlow
Merci @PulsarBlow! Je ne sais pas trop quelle est exactement la différence et les avantages, bien que ... Ceci est l'URL directe de la section correspondante: help.ubuntu.com/community/…
dain
1
Cette réponse a entraîné l'arrêt de la connexion de mon système en raison du remplacement de tous les chemins. Utiliser Ubuntu 16.04.
Frisbetarian
1
@Frisbetarian vous devez vous assurer d'ajouter le $PATH:bit qui inclut la définition existante de PATH
dain
@dain: ton commentaire m'a sauvé la vie!
Py-ser
46

Pour les variables d'environnement persistantes disponibles pour des utilisateurs particuliers uniquement. Je recommande fortement la documentation officielle Ubuntu.

https://help.ubuntu.com/community/EnvironmentVariables

En me référant à la documentation ci-dessus, j'ai configuré les outils de chemin d'accès du SDK Android par:

  1. créer un ~/.pam_environmentfichier dans le répertoire personnel.
  2. dont le contenu est PATH DEFAULT=${PATH}:~/android-sdk-linux/tools.
  3. Un chemin d’utilisateur personnalisé supplémentaire peut être ajouté en séparant les chemins par deux points (:) .
  4. cela nécessite une reconnexion , ce qui signifie que vous devez vous déconnecter et vous reconnecter à l'environnement de bureau.
Eduardo B.
la source
1
C'est la meilleure réponse.
Paulo Coghi
26

Mettez cette ligne dans votre ~/.bashrcfichier.

Il est recherché chaque fois que vous ouvrez un terminal

EDIT : Sur la base des commentaires ci - dessous, pour un cadre plus général qui s'appliquera à toutes les coquilles (y compris quand vous frappez Alt- F2dans l' unité), ajoutez la ligne à votre ~/.profilefichier. Cependant, vous ne devriez probablement pas faire les deux, car le chemin sera ajouté deux fois à votre PATHenvironnement si vous ouvrez un terminal.

Ian B.
la source
1
En fait, je pensais que vous définissiez le chemin dans $HOME/.profileles paramètres personnels ou /etc/profilepour tous les utilisateurs. Mais si cela n’est nécessaire que pour Bash, je suppose que l’un ou l’autre fonctionnera.
Marty Fried
1
Si vous le configurez ~/.bashrc, il ne sera disponible que dans les terminaux ouverts. Par exemple, si vous appuyez sur Alt + F2 et essayez d'exécuter une commande à partir de ce répertoire, il ne la trouvera pas. Si vous le définissez dans ~/.profileou ~/.pam_environment, la session gnome (ou le DE que vous utilisez) en héritera. Ajouter PATH dans a ~/.bashrcaussi l’inconvénient que si vous ouvrez / exec bash de manière interactive depuis un autre shell bash interactif, il sera ajouté plusieurs fois.
geirha
2
Je ne me suis pas vraiment penché sur la question depuis un moment, alors j'ai fait une recherche et il semble qu'il existe au moins 95 façons différentes de définir le chemin, dont la plupart sont discutées ici . Je n'ai jamais compris lequel est le meilleur. Je pense que ~/.profilec'est correct pour les chemins personnels, cependant; c'est là que Ubuntu ajoute le ~/binrépertoire. Et j'avoue avoir exagéré un peu le nombre de façons, juste un peu.
Marty Fried
1
@MartyFried, oui, pour citer le bot dans #bash sur freenode: «L'écrasante majorité des scripts, du code, des tutoriels et des guides bash sur Internet sont de la merde. Sturgeon était un optimiste. »En utilisant Google pour le problème bash, vous trouverez souvent beaucoup de solutions à moitié efficaces avant d’en trouver une bonne. Oh et j'irais avec ~/.profiledans ce cas aussi.
geirha
1
@geirha - Je conviens que la plupart des guides sur Internet en général sont probablement de la merde, en particulier tout ce qui existe sous Linux, étant donné que différentes distributions, voire des versions différentes de la même, font les choses différemment. Cela se résume généralement à ce qui fonctionne, mais la plupart des gens ne réalisent pas que ce qui fonctionne est simplement ce qui fonctionne, pas nécessairement ce qui est juste ou même ce qui fonctionnera toujours. J'essaie de trouver lequel des nombreux moyens est réellement correct, parce que je déteste faire les choses plus d'une fois - mais ce n'est pas toujours facile. :)
Marty Fried
15

Pour l’adapter au système, ajoutez la ligne export PATH=/path/you're/adding:$PATHà la fin de /etc/profile.

Pour ajouter le répertoire uniquement à l'utilisateur connecté, ajoutez la même ligne à ~/.bash_profile.

ennuikiller
la source
14

L'ajouter à .bashrc fonctionnera, mais je pense que la méthode la plus traditionnelle de configuration de vos variables de chemin est le .bash_profile en ajoutant les lignes suivantes.

PATH=$PATH:/my/path/foo
export PATH

Selon ce fil, il semble que le comportement d'Ubuntu soit légèrement différent de celui de RedHat et de ses clones.

3fluence
la source
1
Je n'ai pas de fichier .bash_profile, dois-je le créer?
Justingrif
7
Si vous en avez .bashrc, collez-le à la .bashrcplace. Les terminaux d'interface graphique dans Ubuntu ne sont pas des shells de connexion, .bash_profileils ne seront donc pas exécutés.
1
Je ne cours pas un shell. Mais du fil au-dessus, il semble que le fichier .bashrc fonctionne parfaitement.
Justingrif
2
Les deux fonctionneront si votre shell est un shell de connexion. Mais j’ai juste essayé l’approche .bash_profile sur l’une de mes machines Ubuntu et même après le redémarrage de ma session gnome, il n’a pas créé le fichier .bash_profile. Je dirais donc que mettre ceci dans .bashrc est probablement la voie à suivre avec Ubuntu.
3dinfluence
3
@justingrif Non, vous n'en avez pas besoin .bash_profile. Si bash ne trouve pas .bash_profile(lorsque vous vous connectez de manière interactive), il le recherchera .profileet l'utilisera à la place. Par défaut, vous aurez un .profileet .bashrcdans Ubuntu. Et .profilec’est le bon endroit pour définir les variables d’environnement si nous ne tenons pas compte de pam_env.
geirha
10

En terminal, cdàthe_directory_you_want_to_add_in_the_path

echo "export PATH=$(pwd):\${PATH}" >> ~/.bashrc

Ce n'était pas mon idée. J'ai trouvé cette façon d'exporter le chemin sur ce blog ici .

Vittorio Cecchetto
la source
8
sudo vi /etc/profile.d/SCRIPT_NAME.sh

ajouter là

export PATH=YOUR_PATH_WITHOUT_TRAILING_SLASH:$PATH
Jorge Castro
la source
2
sudo nano /etc/profile.d/SCRIPT_NAME.shest plus facile pour les débutants.
isomorphismes
1
Pour les débutants, gksu gedit /etc/profile.d/SCRIPT_NAME.shc'est encore plus facile.
Fouric
6

Chaque fois que j'installe mon dossier de scripts BASH, je suis le modèle de test pour un $HOME/bindossier qui se trouve dans la plupart des fichiers .profile des versions récentes d'Ubuntu. Je pose un test qui ressemble à

if [ -d "/usr/scripts" ]; then
   PATH="/usr/scripts:$PATH"
fi

Cela fonctionne à peu près à 100% du temps, et me laisse libre de le changer dans un éditeur de texte avec un rapide "Remplacer tout" si je décidais de me déplacer /scriptsquelque part plus près de mon $HOMEdossier. Je ne l'ai pas encore fait dans 6 installations Ubuntu, mais il y a "toujours demain". S

BZT

Silversleevesx
la source
6

La méthode recommandée pour modifier votre fichier PATHis from/etc/environment

Exemple de sortie de /etc/environment:

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"

Par exemple, pour ajouter le nouveau chemin de /home/username/mydir

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/username/mydir"

Ensuite, redémarrez votre PC.


Variables d'environnement à l'échelle du système

Le fichier / etc / environment est un fichier approprié pour les paramètres de variable d'environnement qui affectent le système dans son ensemble (plutôt que seulement un utilisateur particulier). Une alternative consiste à créer un fichier à cette fin dans le répertoire /etc/profile.d.

/ etc / environment

Ce fichier est spécifiquement conçu pour les paramètres de variable d'environnement à l'échelle du système. Ce n'est pas un fichier de script, mais plutôt une expression d'affectation, une par ligne.

Remarque: le développement de variable ne fonctionne pas dans / etc / environment.

Plus d'informations peuvent être trouvées ici: EnvironmentVariables

Benny
la source
1
La réponse la plus basse mais la plus correcte. Ce fichier est généralement rempli automatiquement par bin Ubuntu avec le chemin.
NotoriousPyro
4

Ouvrez votre terminal, tapez gedit .profileet insérez les informations suivantes:

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$PATH:$HOME/bin"
fi

 #the following line add Bin where you dont have a Bin folder on your $HOME
    PATH="$PATH:/home/mongo/Documents/mongodb-linux-i686-2.2.2/bin"

Fermer et ouvrir le terminal, cela devrait fonctionner.

Djavier
la source
2

Mettez-le sur votre ~/.bashrcou whatevershell vous utilisez rc (ou pour être mentionné précédemment ~/.profile) ET ~/.xsessionrcainsi cela fonctionnera également dans X (coque extérieure).

Mikaela
la source
1

Même si les scripts système ne l'utilisent pas, dans tous les cas où l'on souhaite ajouter un chemin (par exemple, $HOME/bin) à la variable d'environnement PATH, on devrait utiliser

PATH="${PATH:+${PATH}:}$HOME/bin"

pour ajouter (au lieu de PATH="$PATH:$HOME/bin"), et

PATH="$HOME/bin${PATH:+:${PATH}}"

pour ajouter (au lieu de PATH="$HOME/bin:$PATH").

Cela évite les deux-points fantômes parasites lorsqu’il $PATHest initialement vide, ce qui peut avoir des effets indésirables.

Voir, par exemple, https://unix.stackexchange.com/questions/162891/append-to-path-like-variable-without-creating-leading-coling-if-unset

sancho.s
la source
-1

Pour Ubuntu, éditez le ~/.bashrcet ajoutez la ligne suivante.

. ~/.bash_profile

Puis éditez votre .bash_profile selon vos besoins .....

Jorge Castro
la source
1
Réduit parce que vous n'avez pas expliqué comment "éditer votre .bash_profilecomme vous avez besoin". Que dois-je faire exactement au .bash_profile?
isomorphismes
4
C'est la mauvaise façon. .profileou .bash_profiledevrait source .bashrc. Pas l'inverse.
geirha