Qu'est-ce que la variable PATH Unix et comment puis-je y ajouter?

11

De nombreux didacticiels de programmation demandent aux utilisateurs d'ajouter quelque chose à leur PATHmais n'expliquent pas de quoi il s'agit. Les ressources existantes qui expliquent PATHaux utilisateurs nouveaux sur la ligne de commande ne sont pas très bonnes.

  • Qu'est-ce que la PATHvariable Unix ?

  • Je viens de télécharger un programme, puis j'ai essayé d'exécuter une commande dans le terminal et j'ai obtenu command not found. Qu'est-ce que cela a à voir avec le PATH?

  • J'ai ajouté quelque chose à PATHavec cette commande, puis les choses ont fonctionné:

    export PATH=/path/to/some/bin:$PATH
    

    ... mais je l'ai récupéré command not foundla prochaine fois que j'ai démarré mon ordinateur. Comment puis-je le faire rester à PATHchaque fois que j'ouvre le terminal?

  • Quelle est la meilleure façon de déterminer si un programme comme Git ou gccest déjà chargé sur mon ordinateur?

Kevin Burke
la source
3
J'ai lu de nombreuses réponses sur SO et je n'ai pas trouvé de réponse qui réponde à chacune de ces questions d'une manière qu'un débutant puisse comprendre. Je veux quelque chose auquel je puisse lier de nouveaux utilisateurs en ligne de commande. J'espérais l'ajouter en tant que wiki communautaire et y attacher une prime importante.
Kevin Burke
4
Je parie que je peux trouver 50 résultats si je recherche sur Google pour cette question. Pourquoi tu ne peux pas?
trojanfoe
2
Et si aucun de ces liens ne pointe vers SO pour une question qualifiée pour être ici, alors il devrait être ajouté ici. Nous voulons que SO soit l'endroit où Google va pour les questions de programmation.
Veuillez consulter cet article de MSO pour connaître les motivations de Kevin à poser cette question. Il fera très probablement une modification pour clarifier la façon dont ces informations sont utiles.
jmort253
1
@ jmort253: Eh bien, il devrait commencer à le faire rapidement. 4/5 votes serrés. Je ne vais pas fermer car je sais que je veux modifier la question, mais il vaut mieux la faire rapidement.
Madara's Ghost

Réponses:

17

Le chemin UNIX est une variable d'environnement qui est une liste de répertoires dans lesquels rechercher les programmes que vous essayez d'exécuter. Il vous permet d'éviter d'avoir à utiliser le chemin d'accès complet pour exécuter des choses comme /bin/ls(par exemple en mettant /binle chemin d'accès).

Par exemple, un chemin peut consister en:

/bin:/usr/bin:/usr/sbin

et cela signifie que lorsque vous tapez la commande xyzzy, il essaiera d'exécuter le premier fichier qu'il trouve dans la liste actuelle:

/bin/xyzzy
/usr/bin/xyzzy
/usr/sbin/xyzzy

(il peut ignorer les fichiers non exécutables s'il est intelligent).

Vous pouvez ajouter des choses au chemin avec une commande comme:

set PATH=/directory/to/add:$PATH:/low/priority/path

qui place /directory/to/addau début de la liste de recherche de chemin et /low/priority/pathà la fin.

Cependant, cela ne change généralement que pour le shell actuel . Si vous souhaitez effectuer une modification dans chaque shell, vous devez ajouter cette ligne à l'un de vos fichiers de démarrage, comme $HOME/.profileou /etc/profile. Le fichier correct à utiliser dépend de votre shell lui-même et de la façon dont vous avez configuré les fichiers de démarrage. Il n'est pas toujours facile de dire où cela devrait aller, mais les règles sont généralement expliquées dans la page de manuel pour le shell que vous utilisez.

Vous pouvez généralement trouver une commande dans le chemin d'accès avec l'un des éléments suivants:

which cmd
whence cmd

pour localiser l' cmdexécutable. Par exemple, sur mon système Debian, j'obtiens la transcription suivante:

pax> which ls
/bin/ls

pax> which firefox
/usr/bin/firefox

pax> which xyzzy

pax> 

la source
1
Cette question appartient-elle à stackoverflow?
trojanfoe
@trojanfoe, autant que toute question liée au shell, oui, je pense que oui. Il est aussi un langage de programmation.
J'ai modifié la réponse pour l'utiliser :comme séparateur, comme cela est utilisé sur * nix. Windows utilise ;(probablement parce :qu'il a déjà un sens C:).
Joachim Sauer
En fait, @Joachim, il est peut-être plus correct de dire qu'un shell donné (plutôt qu'UNIX lui-même) a un séparateur de répertoire spécifique, mais vous avez raison pour tous ceux que j'utilise du haut de ma tête. Merci pour la correction, cheers.
@paxdiablo: oui, j'y ai pensé mais je ne pense pas non plus à un shell Unix qui n'utilise pas :(en Java, par exemple, il path.separatorest toujours :sur * nix).
Joachim Sauer
5

Quel est?

La variable d'environnement PATH est une liste de répertoires délimités par deux points que votre shell recherche lorsque vous entrez une commande.

Comment le régler?

PATH=$PATH:/your/directory
export PATH

Comment puis-je le faire rester sur le CHEMIN chaque fois que j'ouvre le terminal?

Mettez les deux lignes précédentes à l'intérieur ~/.bash_profile(si vous utilisez bashpour le terminal).

Pigueiras
la source
3

PATH est une variable d'environnement pour les systèmes de type Unix.

définir le chemin:

export PATH=$PATH:<your path>

chemin non défini:

unset $PATH

définir le chemin de façon permanente

dans votre dossier de départ, activez Affichage -> Afficher les fichiers cachés .... stylo .bash_profile, avant d'exporter la ligne PATH, ajoutez cette ligne .....

PATH=$PATH:<yourpath>

déconnectez-vous et reconnectez-vous ...... vérifiez si cela fonctionne ... bien! ça devrait marcher .....

Shantanu Banerjee
la source
1
Désolé pour le downvote, mais c'est mal formaté et formulé. Essayez d'éviter une utilisation excessive de gras, une utilisation excessive des points de suspension ("...") et écrivez des phrases complètes. Cela devrait aider à éviter de telles baisses à l'avenir.
Joachim Sauer
1
@Joachim Sauer pourquoi ne modifiez-vous pas la réponse? Pourquoi préférez-vous voter contre?
1
@MikroDel: car il existe déjà de meilleures réponses de meilleure qualité à cette question et le vote en aval demande moins d'efforts. Si c'était la seule réponse, je l'aurais probablement édité. Aussi: bien qu'ils ne soient généralement pas amusants, les votes descendants sont des outils légitimes (oui, il y a des flèches haut et bas à côté de chaque question / réponse).
Joachim Sauer
1
modifier ou publier ce commentaire prend à peu près en même temps, mais modifier le rendre meilleur et aider Shantanu Banerjee et d'autres utilisateurs
@MikroDel: alors expliquer le raisonnement derrière un downvote n'aide pas l'utilisateur? Je pense avoir été assez clair sur mon raisonnement et avoir donné des conseils pratiques pour améliorer la qualité. La seule chose que votre insistance fait, c'est de réduire ma volonté d'expliquer mes downvotes (et comme vous pouvez le voir dans mon profil, je ne downvote pas excessivement).
Joachim Sauer