GNU/Linux >> Tutoriels Linux >  >> Linux

Comment ajouter correctement un chemin à un chemin ?

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 si PATH contient des espaces ou [*? .

Ainsi, dans des shells comme dash, export PATH=~/opt/bin:$PATH définit 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).

En relation :Centos – Pourquoi la nouvelle version correcte de Node.js ne s'installe-t-elle pas sur CentOS 7 ?

¹ 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.


Linux
  1. Comment ajouter un répertoire à PATH sous Linux [avec exemples]

  2. Comment ajouter un référentiel Yum

  3. Comment ajouter plusieurs hôtes dans phpMyAdmin

  4. Comment ajouter un utilisateur à un groupe sous Linux

  5. Comment ajouter proprement à $path ?

Comment ajouter un répertoire à PATH sous Linux

Comment ajouter un stockage externe à ownCloud 9

Comment ajouter un répertoire à PATH sous Linux [Astuce rapide]

Comment ajouter une route sous Linux

Comment ajouter un fichier d'échange sur Ubuntu 20.04

Linux :ajouter un répertoire à PATH