Je suis très nouveau sur Linux et je mets la commande suivante à la fin du fichier .profile
sous mon dossier personnel:
export PATH="~/.composer/vendor/bin:$PATH"
Je connais un peu les problèmes des variables d'environnement et de leurs valeurs sous Windows, mais dans ce cas, je veux comprendre ce que fait cette commande et quelles sont les parties qu'elle comprend:
Quelle est cette expression "d'exportation" 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 second$PATH
, et pourquoi en avons-nous besoin de deux?
command-line
bash
environment-variables
JohnDoea
la source
la source
export
commande, car laPATH
variable est déjà marquée comme exportée. (Essayez-les dans les deux sens si vous ne me croyez pas!)Réponses:
export
est une commande (plus précisément c'est une fonction intégrée de Bash , c'est-à-dire que ce n'est pas un exécutable présent dansPATH
, c'est une commande que Bash a intégrée en elle-même).export
définit la variable d'environnement sur le côté gauche de l'affectation à la valeur sur le côté droit 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, l'instance Bash qui source~/.profile
et tous les sous-processus générés dans le même environnement (qui peuvent inclure par exemple également d'autres shells , qui pourra à son tour y accéder).La première,
PATH
comme expliqué ci-dessus, est la variable d'environnement à définir à l'aide deexport
.Depuis
PATH
contient normalement quelque chose quand~/.profile
est source (par défaut , il contient/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
), la mise simplementPATH
à~/.composer/vendor/bin
ne rendentPATH
contenir que~/.composer/vendor/bin
.Ainsi, étant donné que les références à une variable dans une commande sont remplacées par (ou "développées" pour) la valeur de la variable par Bash au moment de l'évaluation de la commande ,
:$PATH
est placée à la fin de la valeur à affecterPATH
afin quePATH
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 quiPATH
contient déjà plus~/.composer/vendor/bin:
au début).la source
https://help.ubuntu.com/community/EnvironmentVariables vous aidera probablement.
man bash
Peut également être très utile pour comprendre comment cela fonctionne (au moins dans Bash)Quoi qu'il en soit - en ce qui concerne la
PATH=
définition de laPATH
variable, l'ajout de nouveaux chemins à rechercher, l'ajout à la fin de chemins déjà / précédemment définis, avec$PATH
(qui est essentiellement une référence à laPATH
variable).Donc, disons que vous
PATH
étiez jusqu'à présent réglé sur quelque chose comme:puis vous définissez
votre
PATH
après ce sera comme: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 également les processus / sous-coquilles enfants.
Sachez également que l'ordre des répertoires défini dans
PATH
peut être important. Et quelque chose comme çaPATH="$PATH:a:b:c"
vous donnera le résultat:ce 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 vous donner parfois des résultats inattendus).
la source
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 une chose shell) commande essentiellement les variables d'environnement disponibles pour d'autres programmes appelés depuisbash
(voir la question liée dans Extra Reading) et les sous-coquilles.PATH
variable.$PATH
est l'PATH
affectation par défaut (ou du moins à quoi ressemble la variable jusqu'à ce que cette commande apparaisse dans votre.bashrc
ou.profile
), et développez-la.~/.composer/vendor/bin
va se développer vers/home/username/.composer/vendor/bin
, où se.composer
trouve le dossier caché en raison du premier point.~/.composer/vendor/bin:$PATH
s'est maintenant transformé en une longue liste de dossiers, séparés par:
. Tout est entouré de guillemets doubles afin que nous incluions des dossiers avec des espaces sur leur chemin.PATH
des commandes variables et externes autorisées à l'utiliserExemple simple
Mon shell interactif est en fait
mksh
, qui se trouve également avoirexport
intégré. En utilisantexport
pour définirVAR
, ma variable peut être passée à et utilisée par une chaîne de commandes / sous-processus ultérieure, où j'ai exporté cette même variableLecture supplémentaire
la source
~
in~/.composer/vendor/bin
ne sera pas étendu! Le tilde n'est développé que dans quelques endroits spéciaux, comme directement après le=
signe.PATH="~/.foo:$PATH"
résulte en~/.foo:/other/path/dirs...
. Mais~
serait élargiPATH=~"/.foo:$PATH"
, ce qui se traduit par/home/user/.foo:/other/path/dirs...
.J'ai lu ici et dans d'autres endroits du Web, parlé à un ami à ce sujet et décidé qu'en tant que étudiant de première année (peut-être plus d'un étudiant de première année d'Ubuntu que certains ici pourraient penser), je devrais mapper cette commande - je devrais faire une carte et ainsi apprenez ce que c'est et où:
Données préliminaires
Si pour l'instant vous n'avez pas compris quelque chose dans ce chapitre - ne vous inquiétez pas, cela deviendra plus clair au fur et à mesure que vous continuerez à lire, mais pour comprendre cette question, vous devez lire les variables d'environnement (EV), leurs valeurs et leur objectif. . Je vais maintenant essayer d'expliquer la commande en termes simples et dans 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
La valeur d'origine de l'EV "PATH" tel qu'il est fourni avec Ubuntu 15.10 est:
Dans la commande elle-même, nous avons deux phrases PATH. Le dernier est $ PATH - Le $ indique "imprimer la ou les valeurs d'origine de l'EV à côté de vous"; Le EV à côté est le PATH EV.
Nous avons exporté la variable de chemin d'accès elle-même (elle est également disponible pour les sous-processus, les processus IE qui s'exécutent dans la CLI qui ne sont pas réellement le shell Bash, mais s'exécutent à l'intérieur (comme Drush , qui est la 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 que j'ai mentionnée dans le paragraphe ci-dessus, permettent de distinguer la nouvelle valeur de celle d'origine.
Les "" sont la zone dans laquelle résident la ou les valeurs.
Le ~ est le dossier de départ.
J'espère qu'après cette cartographie, la commande sera plus claire pour les étudiants de première année comme moi.
la source
La
export
commande rend les variables disponibles dans les sous-coquilles. Autrement dit, sans elle, la variablePATH
ne serait pas visible dans les sous-coques.PATH
est mentionné deux fois:=
signe.=
signe. Cela fait que l'ancienne valeur fait partie de la nouvelle valeur.la source
PATH
ne serait pas visible dans les sous-coques." Ceci est une erreur;PATH
est une variable d' environnement (qui n'est pas tout à fait la même chose qu'une variable shell ), elle est donc automatiquement exportée et laexport
commande n'est pas nécessaire.setenv
commande.PATH
provient de l'environnement, il est automatiquement exporté, vous n'avez donc pas besoin d'exécuterexport
pour que les modifications soient propagées aux processus enfants (contrairement à ce que dit la page que vous avez liée).PATH=foo
etexport PATH=foo
j'ai un comportement identique.la
export
est une commande buildin de bash, des moyens exporter des variables à être variable envirement. (vous pouvez taperhelp export
pour vous pencher plus(les caractères suivent la commande sont des paramètres, divisés par l'espace, donc dans ce cas, il n'y a qu'un seul paramètre)
l'
PATH
est le nom de la variable, généralement, varibale prédéfini par bash, être nommé dans Majuscules.les
=
moyens attribuent une valeur à cette variable.toute la chaîne est la valeur de la varibale
la
$PATH
est une sorte de funciton de bash, nommévariable expantion
, bash remplacera la valeur de l'existPATH
dans la chaîne de paramètres, envoyer avant la chaîne deexport
commandele
:
dans un caractère spécial dans la variable PATH et compris par toutes les applications qui souhaitent utiliser cette variable. cela signifie séparateur. ils auront donc beaucoup de répertoires dans la variable PATH.la source