92 votes

Que fait la commande "exporter" ?

Il m'arrive d'exécuter certaines commandes à l'aveuglette, afin de faire avancer les choses.

J'ai commencé à travailler avec Jenkins récemment, et ensuite j'ai dû utiliser ce export pour exécuter le Archives WAR de Jenkins . Que fait le export en général, et pourquoi devons-nous exécuter cette commande pendant l'exécution de Jenkins (après que la maison de Jenkins soit définie) ?

104voto

Yann Ramin Points 25139

export en sh et les shells apparentés (tels que Bash), marque une variable d'environnement pour être exporté aux processus enfants, de sorte que l'enfant en hérite.

export est défini dans POSIX :

L'interpréteur de commandes donne l'attribut export aux variables correspondant aux noms spécifiés, ce qui les fait figurer dans l'environnement des commandes exécutées par la suite. Si le nom d'une variable est suivi de = mot, alors la valeur de cette variable sera définie par mot.

33voto

barlop Points 766

Je suppose que vous venez d'un environnement Windows. Je vais donc les opposer (je suis aussi un peu nouveau dans le domaine de Linux). J'ai trouvé la réponse d'un utilisateur à mon commentaire utile pour comprendre les choses.

Dans Windows, une variable peut être permanente ou non. Le terme variable d'environnement comprend une variable définie dans le cmd avec la commande SET, ainsi que lorsque la variable est définie dans l'interface graphique de Windows, donc définie dans le registre, et devient visible dans les nouvelles fenêtres cmd.

Par exemple, la documentation pour le set commande dans Windows "Affiche, définit ou supprime les variables d'environnement. Utilisé sans paramètres, set affiche les paramètres d'environnement actuels."

Dans Linux, set n'affiche pas les variables d'environnement. Il affiche les variables de l'interpréteur de commandes qu'il n'appelle pas/ne désigne pas comme des variables d'environnement. De même, Linux n'utilise pas set pour définir des variables (à l'exception des paramètres positionnels et des options de l'interpréteur de commandes, que j'explique en note à la fin), mais uniquement pour les afficher, et encore, uniquement pour afficher les variables de l'interpréteur de commandes. Windows utilise set pour le réglage et l'affichage, par exemple, set a=5 mais pas Linux.

Sous Linux, je suppose que vous pourriez faire un script qui définit les variables au démarrage, par exemple, /etc/profile o /etc/.bashrc mais sinon, ils ne sont pas permanents. Ils sont stockés dans la RAM.

Il existe une distinction dans Linux entre les variables de l'interpréteur de commandes et les variables d'environnement. Sous Linux, les variables de l'interpréteur de commandes ne sont présentes que dans l'interpréteur de commandes en cours et variables d'environnement sont dans ce shell et tous les shells enfants.

Vous pouvez afficher les variables du shell avec la commande set (notez cependant que, contrairement à Windows, les variables ne sont pas définies sous Linux avec la commande set commande).

set -o posix; set (faisant cela set -o posix une première fois, permet de ne pas afficher trop de choses inutiles). Donc set affiche les variables du shell.

Vous pouvez afficher les variables d'environnement avec la commande env commandement.

Les variables shell sont définies avec, par exemple, simplement a = 5 .

Les variables d'environnement sont définies avec exporter . L'exportation définit également la variable shell.

Ici vous voyez la variable shell zzz set avec zzz = 5 et voir ce que cela donne quand on exécute set mais elle n'apparaît pas comme une variable d'environnement.

Ici, nous voyons yyy défini avec l'exportation, il s'agit donc d'une variable d'environnement. Et vous voyez qu'elle apparaît à la fois dans les variables de l'interpréteur de commandes et dans les variables d'environnement :

$ zzz=5

$ set | grep zzz
zzz=5

$ env | grep zzz

$ export yyy=5

$ set | grep yyy
yyy=5

$ env | grep yyy
yyy=5

$

Autres questions utiles :

Note : Un point qui développe un peu et corrige ce que j'ai écrit, est que, dans Linux bash, 'set' peut être utilisé pour définir des "paramètres positionnels" et des "options/attributs de l'interpréteur de commandes", et techniquement, ces deux éléments sont des variables, bien que l'attribut pages de manuel pourraient ne pas les décrire comme tels.

Mais, comme nous l'avons mentionné, set ne définit pas les variables du shell ou les variables d'environnement). Si vous faites set asdf alors il met $1 à asdf, et si vous faites echo $1 vous voyez asdf .

Si vous le faites set a=5 il ne définira pas la variable a, égale à 5. Il définira le paramètre positionnel $1 égal à la chaîne de caractères "a=5". Donc, si vous avez déjà vu set a=5 sous Linux, c'est probablement une erreur, à moins que quelqu'un ne veuille réellement que la chaîne a=5, dans $1.

L'autre chose que Linux set peut définir, sont les options/attributs du shell. Si vous faites set -o vous verrez une liste d'entre eux. Et vous pouvez faire par exemple set -o verbose off, pour activer le verbeux (d'ailleurs, la valeur par défaut est off, mais cela ne fait aucune différence). Ou vous pouvez faire set +o verbose pour désactiver le verbiage. Windows ne dispose pas d'un tel usage pour sa commande set.

9voto

katwekibs Points 503

En termes simples, les variables d'environnement sont définies lorsque vous ouvrez une nouvelle session shell. À tout moment, si vous modifiez l'une des valeurs de la variable, le shell n'a aucun moyen de détecter ce changement. Cela signifie que les modifications que vous avez apportées deviennent effectives dans les nouvelles sessions du shell.

En export permet, quant à elle, de mettre à jour la session actuelle de l'interpréteur de commandes à propos de la modification que vous avez apportée à la variable exportée. Vous n'avez pas besoin d'attendre une nouvelle session du shell pour utiliser la valeur de la variable que vous avez modifiée.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X