web-dev-qa-db-fra.com

Qu'est-ce que export PATH = quelque chose: $ PATH signifie?

Je suis très nouveau sur Linux et je mets la commande suivante à la fin du fichier .profile dans mon dossier personnel:

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

Je connais un peu les problèmes de variables d’environnement et de valeurs de Windows, mais dans ce cas, je veux comprendre ce que fait cette commande et quelles sont les parties qu’elle comprend:

  1. Quelle est cette phrase "export" au début? Exporte-t-il les données pour qu'elles soient disponibles pour Bash?

  2. Quel est le premier PATHet quel est le deuxième $PATH, et pourquoi avons-nous besoin de deux?

27
JohnDoea

J'ai lu ici et à d'autres endroits du Web, parlé à un ami de cette question et décidé qu'en tant que étudiant de première année (peut-être davantage en première année d'Ubuntu, certains ici pourraient penser), je devrais mapper cette commande - je devrais faire une carte et apprenez donc ce qui se passe autour de vous et où vous vous trouvez:

Données préliminaires

Si pour l'instant vous n'avez pas compris quelque chose dans ce chapitre - ne vous inquiétez pas, cela va devenir plus clair à mesure que vous continuerez à lire, mais pour comprendre cette affaire, vous devez lire sur les variables d'environnement (EV), leurs valeurs et leur objectif. . Je vais maintenant essayer d’expliquer la commande avec des mots simples et avec une méthode de mappage, pour les nouveaux arrivants comme moi et uniquement pour les nouveaux arrivants. J'ai essayé de faire de mon mieux ici ...

Cartographie

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

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

/usr/bin:/usr/sbin

Dans la commande elle-même, nous avons deux phrases PATH. Le dernier est $ PATH - Le $ dit "affiche la valeur originale ou les valeurs de l'EV à côté de vous"; Le véhicule voisin est le véhicule PATH.

Nous avons exporté la variable de chemin elle-même (mise à notre disposition également pour les sous-processus, processus IE exécutés dans la CLI qui ne sont pas réellement le shell Bash, mais courir à l'intérieur (comme Drush , qui est le Drupal CLI).

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

  • Les deux points (:) à la fin de la nouvelle valeur mentionnée dans le paragraphe ci-dessus, servent à distinguer la nouvelle valeur de celle d'origine.

  • Les "" sont la zone dans laquelle résident la/les valeur (s).

  • Le ~ est le dossier personnel.


J'espère qu'après cette cartographie, la commande sera plus claire pour les étudiants de première année comme moi.

2
JohnDoea

Quelle est cette phrase "export" au début?

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

Exporte-t-il les données pour qu'elles soient disponibles pour Bash?

exportdéfinit la variable d'environnement à gauche de l'affectation sur la valeur à droite de l'affectation; cette variable d’environnement est visible pour le processus qui la définit et pour tous les sous-processus générés dans le même environnement, c’est-à-dire dans ce cas pour l’instance Bash qui code ~/.profile et pour tous les sous-processus générés dans le même environnement (pouvant inclure, par exemple, également coquilles, qui pourront à leur tour y accéder).

Quel est le premier PATHet quel est le deuxième $PATH, et pourquoi avons-nous besoin de deux?

Le premier PATHname__, comme expliqué ci-dessus, correspond à la variable d'environnement à définir à l'aide de exportname__.

Étant donné que PATHcontient normalement quelque chose lorsque ~/.profile est généré (par défaut, il contient /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games), définir simplement PATHsur ~/.composer/vendor/bin ferait que PATHdonnerait seulement ~/.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 à assigné à PATHde sorte que PATHfinisse 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 PATHcontient déjà plus ~/.composer/vendor/bin: au début).

39
kos

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

Quoi qu'il en soit, comme pour PATH=, vous définissez essentiellement la variable PATHname__, en ajoutant de nouveaux chemins dans lesquels effectuer la recherche, en ajoutant à la fin des chemins déjà/précédemment définis, avec $PATH (qui est essentiellement une référence à la variable PATHname__.

Donc, disons que votre PATHétait jusqu'ici réglé sur quelque chose comme:

PATH="x:y:z"

et puis vous définissez

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

votre PATHaprès cela sera comme:

a:b:c:x:y:z

J'espère que cela à du sens.

Et en plus de cela, vous exportez la nouvelle variable afin qu'elle soit connue dans votre environnement, y compris les processus/sous-shell enfants.

Sachez simplement que l'ordre des répertoires, tel qu'il est défini dans PATHname__, peut être important. 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 vous avez votre commande dans plusieurs répertoires, le premier trouvé sera utilisé - ce qui peut parfois vous donner des résultats inattendus).

16
Jacek

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

  • export Shell intégré (ce qui signifie qu'il n'y a pas /bin/export, c'est un élément du shell) rend les variables d'environnement accessibles aux autres programmes appelés à partir de bash (voir la question liée dans Extra Reading) et les sous-shell.
  • L'affectation dans Shell prend en premier lieu l'expansion, puis l'affectation a lieu en second. Ainsi, le contenu des guillemets doubles est développé en premier, puis enregistré ultérieurement dans la variable PATH.
  • $PATH est l'affectation par défaut PATH (ou du moins à quoi la variable ressemble jusqu'à ce que cette commande apparaisse dans votre .bashrc ou .profile) et développez-la.
  • ~/.composer/vendor/bin va se développer en /home/username/.composer/vendor/bin, où .composer est un dossier caché en raison du point qui le précède.
  • Ce ~/.composer/vendor/bin:$PATH court a maintenant été transformé en une longue liste de dossiers, séparés par :. Tout est mis entre guillemets afin d'inclure les dossiers avec des espaces dans leur chemin.
  • Enfin, tout est stocké dans la variable PATH et les commandes externes sont autorisées à l'utiliser.

Exemple simple

Mon shell interactif est en fait mksh, qui possède également le nom export. En utilisant export pour définir VAR, ma variable peut être transmise et utilisée par une chaîne de commandes/sous-processus ultérieure, où 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

2
Sergiy Kolodyazhnyy

La commande export rend les variables disponibles dans les sous-shell. Autrement dit, sans cette variable, la variable PATH ne serait pas visible dans les sous-shell.

PATH est mentionné deux fois:

  • En tant que variable, la valeur est affectée, à gauche du signe =.
  • En tant que nom de variable en cours de remplacement par sa valeur à droite du signe =. Cela fait que l'ancienne valeur fait partie de la nouvelle valeur.
1
rexkogitans
export PATH="~/.composer/vendor/bin:$PATH"
  1. exportest une commande intégrée de bash, ce qui signifie que les variables d'exportation sont des variables d'environnement. (vous pouvez taper help export pour en apprendre plus

    (les caractères suivent la commande, ce sont des paramètres, divisés par espace, donc dans ce cas, il n'y a qu'un paramètre)

  2. PATHest le nom de la variable, généralement prédéfinie varibale par bash, être nommé en majuscule.

  3. le = signifie affecter une valeur à cette variable.

  4. toute la chaîne est la valeur de la varibale

  5. le $PATH est une sorte de fonction de bash, nommé variable expantion, bash remplacera la valeur de exist PATHdans la chaîne de paramètre, AVANT d'envoyer la chaîne à la commande exportname__

  6. le : dans une variable spéciale dans la variable PATH et compris par toutes les applications qui souhaitent utiliser cette variable. cela signifie seperator. ils auront donc beaucoup de répertoires dans la variable PATH.

0
lovespring