48 votes

Que signifie export PATH=quelque chose:$PATH ?

Je suis très novice en matière de Linux et j'ai placé la commande suivante à la fin du fichier .profile dans mon dossier personnel :

export PATH="~/.composer/vendor/bin:$PATH"

Je connais un peu les questions relatives aux variables d'environnement et à leurs valeurs grâce à Windows, mais dans le cas présent, je veux comprendre ce que fait cette commande et quelles sont les parties qu'elle comprend :

  1. Qu'est-ce que cette phrase "exporter" au début ? S'agit-il d'exporter les données pour qu'elles soient disponibles pour Bash ?

  2. Quel est le premier PATH et quelle est la deuxième $PATH et pourquoi en avons-nous besoin de deux ?

54voto

ieplugin Points 216

Qu'est-ce que cette phrase "export" au début ?

export est une commande (plus précisément c'est un Intégrée à Bash c'est-à-dire qu'il ne s'agit pas d'un exécutable présent dans l'application PATH (il s'agit d'une commande intégrée à Bash).

Exporte-t-il les données pour les mettre à la disposition de Bash ?

export définit la variable d'environnement du côté gauche de l'affectation à la valeur du côté droit de l'affectation ; cette variable d'environnement est visible par le processus qui la définit et par tous les sous-processus créés dans le même environnement, c'est-à-dire dans ce cas par l'instance de Bash qui source ~/.profile et à tous les sous-processus créés dans le même environnement (qui peut inclure, par exemple, d'autres shells, qui pourront à leur tour y accéder).

Quel est le premier PATH et quelle est la deuxième $PATH et pourquoi en avons-nous besoin de deux ?

Le premier PATH comme expliqué ci-dessus, est la variable d'environnement à définir à l'aide de export .

Depuis PATH contient normalement quelque chose lorsque ~/.profile est sourcé (par défaut, il contient /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games ), il suffit de définir PATH a ~/.composer/vendor/bin ferait PATH ne contiennent que ~/.composer/vendor/bin .

Ainsi, puisque les références à une variable dans une commande sont remplacées par (ou "étendues" à) la valeur de la variable par Bash au moment de l'évaluation de la commande , :$PATH est placé à la fin de la valeur à assigner à PATH de sorte que PATH finit par contenir ~/.composer/vendor/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games (c'est-à-dire ce que PATH contient déjà plus ~/.composer/vendor/bin: au début).

25voto

prodaea Points 1357

https://help.ubuntu.com/community/EnvironmentVariables vous aidera probablement. En outre man bash peut être très utile pour comprendre comment cela fonctionne (au moins en Bash)

Quoi qu'il en soit, en ce qui concerne PATH= vous définissez en fait le PATH en ajoutant de nouveaux chemins à parcourir, en ajoutant à la fin des chemins déjà/précédemment définis, avec $PATH (qui est en fait une référence au PATH variable).

Ainsi, dites à votre PATH était jusqu'à présent réglé sur quelque chose comme :

PATH="x:y:z"

puis vous définissez

PATH="a:b:c:$PATH"

votre PATH Après cela, ce sera comme :

a:b:c:x:y:z

J'espère que cela a du sens.

En outre, vous exportez la nouvelle variable afin qu'elle soit connue dans votre environnement, y compris dans les processus enfants et les sous-coquilles.

Sachez également que l'ordre des répertoires, tel qu'il est défini dans la rubrique PATH peut être importante. Et quelque chose comme PATH="$PATH:a:b:c" vous donnera le résultat :

x:y:z:a:b:c

qui affectera l'ordre des répertoires / chemins lors de la recherche d'une commande (si votre commande se trouve dans plusieurs répertoires, le premier trouvé sera utilisé - ce qui peut parfois donner des résultats inattendus).

2voto

Sergiy Kolodyazhnyy Points 97292

Voici la commande pour que tout le monde puisse suivre les points de la liste. export PATH="~/.composer/vendor/bin:$PATH"

  • export Shell intégré (ce qui signifie qu'il n'y a pas de /bin/export (c'est un truc Shell) rend les variables d'environnement disponibles pour d'autres programmes appelés à partir de la commande bash ( voir la question liée dans Lecture supplémentaire ) et les sous-coquilles.
  • L'affectation dans Shell se fera d'abord, puis l'affectation se fera ensuite. Ainsi, ce qui se trouve entre guillemets doubles est d'abord développé, puis sauvegardé dans PATH plus tard.
  • $PATH est la valeur par défaut PATH (ou du moins à quoi ressemble la variable jusqu'à ce que cette commande apparaisse dans votre .bashrc o .profile ) et l'étendre.
  • ~/.composer/vendor/bin va s'étendre à /home/username/.composer/vendor/bin.composer est un dossier caché en raison du point qui le précède.
  • Ce court ~/.composer/vendor/bin:$PATH se sont transformées en une longue liste de dossiers, séparés par des : . Tout est placé entre guillemets afin d'inclure les dossiers dont le chemin d'accès comporte des espaces.
  • Enfin, tout est stocké dans PATH Variable et commandes externes autorisées à l'utiliser

Exemple simple

Mon Shell interactif est en fait mksh qui se trouve avoir également export builtin. En utilisant export pour définir VAR ma variable peut être transmise et utilisée par la chaîne de commandes/sous-processus suivante, dans laquelle j'ai exporté cette même variable

$ echo $SHELL            
/bin/mksh
$ VAR="HelloAskUbuntu"
$ bash -c 'echo $VAR' 
$ export VAR="HelloAskUbuntu"                                                  
$ bash -c 'echo $VAR'                                                          
HelloAskUbuntu
$ 

Lecture supplémentaire

2voto

J'ai lu ici et ailleurs sur le web, j'en ai parlé avec un ami et j'ai décidé qu'en tant que débutant (peut-être plus un débutant Ubuntu que certains ici pourraient le penser), je devrais cartographier cette commande - je devrais faire une carte et ainsi apprendre ce qu'elle contient et où elle se trouve :

Données préliminaires

Si vous n'avez pas compris quelque chose dans ce chapitre, ne vous inquiétez pas, cela deviendra plus clair au fur et à mesure de votre lecture, mais pour comprendre ce sujet, vous devez lire les variables d'environnement (EV), leurs valeurs et leurs objectifs. Je vais maintenant essayer d'expliquer la commande avec des mots simples et une méthode de mappage, pour les nouveaux venus comme moi, et seulement pour les nouveaux venus. J'ai essayé de faire de mon mieux...

Cartographie

export PATH="~/.composer/vendor/bin:$PATH"

La valeur originale de l'EV "PATH" telle qu'elle est fournie avec Ubuntu 15.10, est :

/usr/bin:/usr/sbin

Dans la note de commande elle-même, nous avons deux phrases PATH. La dernière est $PATH - Le $ dit "imprimez la ou les valeurs originales de l'EV à côté de vous" ; l'EV à côté est l'EV PATH.

Nous exporté la variable path elle-même (l'a rendue disponible pour les sous-processus également, c'est-à-dire les processus qui s'exécutent dans le CLI et qui ne sont pas réellement le Shell de Bash, mais qui s'exécutent à l'intérieur de celui-ci (tels que Drush qui est le Drupal CLI).

Outre l'exportation, nous avons également élargi notre champ d'action : La première phrase PATH (PATH=) nous a permis d'ajouter une valeur supplémentaire (~/.composer/vendor/bin :) à la valeur originale (représentée par $PATH).

  • Les deux points ( :) à la fin de la nouvelle valeur que j'ai mentionnée dans le paragraphe ci-dessus servent à distinguer la nouvelle valeur de la valeur originale.

  • Les "" représentent la zone dans laquelle la/les valeur(s) réside(nt).

  • Le ~ est le dossier personnel.


J'espère qu'après la cartographie que j'ai réalisée, le commandement sera plus clair pour les étudiants de première année comme moi.

1voto

rexkogitans Points 291

En export rend les variables disponibles dans les sous-coquilles. En d'autres termes, sans cette commande, la variable PATH ne serait pas visible dans les sous-coquilles.

PATH est mentionné deux fois :

  • En tant que variable à laquelle la valeur est assignée, à gauche de l'élément = signe.
  • Le nom de la variable étant remplacé par sa valeur à droite du champ = signe. L'ancienne valeur fait ainsi partie de la nouvelle.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X