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:
Quelle est cette phrase "export" au début? Exporte-t-il les données pour qu'elles soient disponibles pour Bash?
Quel est le premier PATH
et quel est le deuxième $PATH
, et pourquoi avons-nous besoin de deux?
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:
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 ...
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.
Quelle est cette phrase "export" au début?
export
est 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 PATH
name__, il s'agit d'une commande intégrée à Bash).
Exporte-t-il les données pour qu'elles soient disponibles pour Bash?
export
dé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
PATH
et quel est le deuxième$PATH
, et pourquoi avons-nous besoin de deux?
Le premier PATH
name__, comme expliqué ci-dessus, correspond à la variable d'environnement à définir à l'aide de export
name__.
Étant donné que PATH
contient 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 PATH
sur ~/.composer/vendor/bin
ferait que PATH
donnerait 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é à PATH
de sorte que PATH
finisse 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).
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 PATH
name__, 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 PATH
name__.
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 PATH
aprè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 PATH
name__, 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).
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.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.~/.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.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
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:
=
.=
. Cela fait que l'ancienne valeur fait partie de la nouvelle valeur.export PATH="~/.composer/vendor/bin:$PATH"
export
est 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)
PATH
est le nom de la variable, généralement prédéfinie varibale par bash, être nommé en majuscule.
le =
signifie affecter une valeur à cette variable.
toute la chaîne est la valeur de la varibale
le $PATH
est une sorte de fonction de bash, nommé variable expantion
, bash remplacera la valeur de exist PATH
dans la chaîne de paramètre, AVANT d'envoyer la chaîne à la commande export
name__
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.